在你的控制器動作,你可以這樣做:
class WhitelabelsController < ActionController
def edit
@whitelabel = params[:id] ? Whitelabel.find(params[:id]) : current_whitelabel
redirect_to whitelabels_url unless @whitelabel
....
end
...
end
現在軌將把/whitelabel/edit
作爲/whitelabel/edit/#{current_whitelabel.id}
沒有指定的ID。
如果發生這種情況對於多個操作,您可以將它作爲之前的過濾器來執行。請務必從個別操作中刪除所有@whitelabel = Whitelable.find(params[:id])
行。
class WhitelabelsController < ActionController
before_filter :select_whitelabel, :except => [:index, :new]
def select_whitelabel
@whitelabel = params[:id] ? Whitelabel.find(params[:id]) : current_whitelabel
redirect_to whitelabels_url unless @whitelabel
end
...
end
回答在評論中更明確指出問題: 可以串聯使用一個單一的資源與上面的代碼有你想要的效果。
配置/ routes.rb中
map.resource :my_whitelabel, :controller => "whitelabels", :member => {:dashboard => :get}
然後在whitelabels控制器使用上述代碼。通過對具有相同操作的不同路徑使用相同的控制器,可以使事情保持乾爽。資源定義了儀表板操作,因此您必須將其添加到控制器。但是如果你使用的是before_filter版本,那應該沒問題。
謝謝您的回答EMFI,但它並沒有回答我的問題。 也許我的問題不清楚。 我對所有whitelabels但其中有些只是針對當前的一些行動。 所以我需要兩種類型的網址: /whitelabels/ID /所有用戶的whitelabels行動。 之類的東西/ my_current_whitelabel /儀表板。 我必須做兩個不同的資源來做到這一點? – lou 2009-10-23 19:42:25
你的問題絕對不清楚。我已經更新了我的答案,以解決您評論中提到的問題。 – EmFi 2009-10-23 19:47:32
好,感謝我EMFI認爲有一個更軌的方式來做到這一點,但也許不會。所以我會做命名路線。 – lou 2009-10-23 19:52:20