قضبان مجمع التوجيه
-
19-09-2019 - |
سؤال
أود أن أفعل شيئا مثل GitHub لديه مع عناوين URL المتداخلة، ومثل كيف يمكنني توجيه عناوين URL ملف تعريف المستخدم لتخطي وحدة التحكم؟ ولكن ليس بالتأكيد حقا كيفية الذهاب معها.
على سبيل المثال، النظر في الالتزام لديهم: ': المستخدم /: Repo / الالتزام /: Sha'، مع ارتكاب وحدة التحكم. كيف يمكنني تكرار هذا النوع من المورد المتداخل؟
شكرا :)
المحلول
إذا ارتكبت وحدة تحكم مريحة تستخدم: Sha بدلا من معرف للعثور على السجلات. يمكنك القيام بذلك بدلا من ذلك:
map.resource :commits, :path_prefix => ':user/:repo', :as => 'commit'
سوف يخلق طرق مريحة قياسية تبدو http://yoursite.tld/:user/:repo/commit/:id
مرة أخرى، إذا كنت لن تقوم أبدا بترجمة جزء المعرف في عنوان URL إلى معرف الالتزام، فلا يوجد سبب لا يمكنك استخدامه ك: قيمة Sha.
مثال:
class CommitController < ApplicationController
def show
@commit = Commit.find(:first, :conditions => {:sha => params[:id]})
end
...
end
قد ترغب أيضا في ركوب To_Param في نموذج الالتزام لإرجاع قيمة Sha.
class Commt < ActiveRecord::Base
...
def to_param
sha
end
end
حتى الآن link_to commit_url(@commit, :user => current_user, :repo => @repo)
سيوفر عنوان URL الذي يطابق المخطط الخاص بك.
نصائح أخرى
ماذا عن
map.connect ':user/:repo/commit/:sha', :action => :index
او استعمل map.resource
بدلا من map.connect
إذا كنت بحاجة إلى طريق مريح.
في وحدة التحكم، يمكن استرجاع معلومات عنوان URL من المعارف، على سبيل المثال params[:user]
إرجاع اسم المستخدم.
يمكنك تسمية طرقك كما تريد، وتحديد وحدات التحكم والإجراءات التي ترغب في استخدامها بها.
على سبيل المثال، قد يكون لديك:
map.connect ':user/:repo/commit/:sha', :controller => 'transactions', :action => 'commit'
هذا من شأنه أن يرسل الطلب إلى طريقة "الالتزام" في وحدة تحكم "المعاملات".
يمكن بعد ذلك الوصول إلى المتغيرات الأخرى في وحدة التحكم الخاصة بك باستخدام Params:
@user = User.find(params[:user])
@repo = Repo.find(params[:repo])