2009-10-23 114 views
1

我有一個模型,白色標籤和用戶的has_many:whitelables單個資源和多個資源

我有一個自定義的方法current_whitelabel(如authlogic或restful_auth爲CURRENT_USER)

我希望我的用戶管理他們的whitelabels(即:edit_whitelabels_path(id))。

但是我不想在params中發送whitelabel ID時引用current_whitelabel。

所以我的想法是創建兩個資源:map.resources whitelabels和map.resource whitelabel。

但我不喜歡這麼多。有沒有更好的方法來完成它?

回答

1

好吧,我終於解決了我的問題。

每個白色標籤都有自己的子域(感謝subdomain_fu),所以我只需要在我的路線單一資源白色標籤上做我的current_whitelabel動作,如果我想要做別人whitelabels行動,我只需要切換子域。

感謝EmFi試圖回答我的奇怪問題。

0

在你的控制器動作,你可以這樣做:

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版本,那應該沒問題。

+0

謝謝您的回答EMFI,但它並沒有回答我的問題。 也許我的問題不清楚。 我對所有whitelabels但其中有些只是針對當前的一些行動。 所以我需要兩種類型的網址: /whitelabels/ID /所有用戶的whitelabels行動。 之類的東西/ my_current_whitelabel /儀表板。 我必須做兩個不同的資源來做到這一點? – lou 2009-10-23 19:42:25

+0

你的問題絕對不清楚。我已經更新了我的答案,以解決您評論中提到的問題。 – EmFi 2009-10-23 19:47:32

+0

好,感謝我EMFI認爲有一個更軌的方式來做到這一點,但也許不會。所以我會做命名路線。 – lou 2009-10-23 19:52:20