我有 1 个模型供 2 个控制器使用 - 1 个由普通用户使用,1 个由管理员用户使用。两个控制器中的新建/创建、编辑/更新操作相同。我有一个所有操作都使用的共享视图,但问题在于该共享视图中的 form_for:对于普通用户,我必须使用:
form_for @my_model, do |f|
对于管理员,我将不得不使用:
form_for [:admin, @my_model] do |f|
如何使用 2 个控制器重用视图?也许有更好的设计方法?
我有 1 个模型供 2 个控制器使用 - 1 个由普通用户使用,1 个由管理员用户使用。两个控制器中的新建/创建、编辑/更新操作相同。我有一个所有操作都使用的共享视图,但问题在于该共享视图中的 form_for:对于普通用户,我必须使用:
form_for @my_model, do |f|
对于管理员,我将不得不使用:
form_for [:admin, @my_model] do |f|
如何使用 2 个控制器重用视图?也许有更好的设计方法?
我不确定您的设计模式是否是最好的。我想您正在使用 partial 来共享视图,您实际上可以locals
在您的 partial 中传递一个参数render
:
# user
<%= render :partial => "form", :locals => { :zone => @my_model } %>
# admin
<%= render :partial => "form", :locals => { :zone => [:admin, @my_model] } %>
# your form_for tag in the shared view
form_for(zone) do |f|
我不确定这是否有效,但希望它能给你一个提示。
您应该为此尝试使用管理命名空间方法。
我想你应该记得部分.
据我了解,您的控制器基本相同(新建/创建、编辑/更新)。我建议添加一个before_filter来测试用户是否是管理员,然后才可以访问销毁操作。(我猜这是不同的方法)。
#Controller
before_filter :admin => :only => [:destroy]