我有一个模型Whitelabel和一个用户has_many:whitelables
我有一个自定义方法current_whitelabel(如current_user的authlogic或restful_auth)
我希望我的用户管理他们的白标签(例如:edit_whitelabels_path(id))。
但是当我引用current_whitelabel时,我不想在参数中发送whitelabel ID。
所以我的想法是创建两个资源:map.resources whitelabels和map.resource whitelabel。
但我不太喜欢这个。是否有更性感的方式来实现它?
答案 0 :(得分:1)
好的,我终于解决了我的问题。
每个whitelabel都有自己的子域名(感谢subdomain_fu),所以我只需要在我的路由中使用单个资源whitelabel来对我的current_whitelabel执行操作,如果我想对其他白标签执行操作,我只需要切换子域名
感谢EmFi试图回答我的奇怪问题。
答案 1 :(得分:0)
在您的控制器操作中,您可以执行以下操作:
class WhitelabelsController < ActionController
def edit
@whitelabel = params[:id] ? Whitelabel.find(params[:id]) : current_whitelabel
redirect_to whitelabels_url unless @whitelabel
....
end
...
end
现在,rails会将/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控制器中使用上面的代码。这通过对具有相同动作的不同路径使用相同的控制器来保持DRY。资源定义了仪表板操作,因此您还必须将其添加到控制器。但如果您使用的是before_filter版本,则应该没有问题。