我有一个模型白色标签和一个用户has_many:
我有一个自定义的方法current_whitelabel (就像current_user的authlogic或restful_auth )
我希望我的用户管理他们的白标(即: edit_whitelabels_path(id))。
但我不想在参数中发送白色标签ID,当它引用current_whitelabel时。
所以我的想法是创建两个资源: map.resources白标和map.resource白标。
但我不太喜欢这个。有没有更性感的方法来实现它呢?
发布于 2009-10-24 20:56:21
好了,我终于解决了我的问题。
每个白标都有自己的子域(感谢subdomain_fu),所以我只需要在我的路由中有一个资源白标,就可以在我的current_whitelabel上执行操作,如果我想在其他白标上执行操作,我只需要切换子域。
感谢EmFi试图回答我奇怪的问题。
发布于 2009-10-24 03:32:40
在你的控制器操作中,你可以这样做:
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回答评论中更清晰的问题:你可以使用一个单独的资源与上面的代码一起使用,以获得你想要的效果。
config/routes.rb
map.resource :my_whitelabel, :controller => "whitelabels", :member => {:dashboard => :get}然后在白色标签控制器中使用上面的代码。这通过对具有相同动作的不同路径使用相同的控制器来使事情保持干爽。该资源定义了一个仪表板操作,因此您也必须将其添加到控制器中。但是如果你使用的是before_filter版本,应该没有问题。
https://stackoverflow.com/questions/1615426
复制相似问题