سؤال

أود أن أفعل شيئا مثل 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])
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top