【问题标题】:2 controllers,1 shared view - how to use form_for2 个控制器,1 个共享视图 - 如何使用 form_for
【发布时间】:2012-08-14 20:12:08
【问题描述】:

我有 1 个模型供 2 个控制器使用 - 1 个由普通用户使用,1 个由管理员用户使用。两个控制器中的新建/创建、编辑/更新操作相同。我有一个所有操作都使用的共享视图,但问题在于该共享视图中的 form_for: 对于普通用户,我必须使用:

form_for @my_model, do |f| 

对于管理员,我必须使用:

form_for [:admin, @my_model] do |f|

如何使用 2 个控制器重用视图?也许有更好的设计方法?

【问题讨论】:

    标签: ruby-on-rails ruby model-view-controller


    【解决方案1】:

    我不确定您的设计模式是否最好。我想您正在使用 partial 来共享视图,您实际上可以在您的 partial render 中传递一个 locals 参数:

    # 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|
    

    我不确定这是否有效,但希望它能给你一个提示。

    您应该为此尝试使用admin namespace method

    【讨论】:

    • 我实际上使用的是管理员命名空间,只是在将本地变量传递给视图时遇到了问题。很棒的东西,谢谢!
    【解决方案2】:

    我想你应该记得partial

    【讨论】:

      【解决方案3】:

      据我了解,您的控制器基本相同(新建/创建、编辑/更新)。 我建议添加一个before_filter 来测试用户是否是管理员,然后才可以访问销毁操作。 (我猜这是不同的方法)。

      #Controller
      before_filter :admin => :only => [:destroy]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-21
        • 1970-01-01
        • 2015-06-26
        • 1970-01-01
        • 2015-02-06
        相关资源
        最近更新 更多