【问题标题】:Avoiding repetitive "content_for" in views避免视图中重复的“content_for”
【发布时间】:2011-01-10 11:55:28
【问题描述】:

我的布局中放置了一个子菜单,该子菜单因控制器而异,但在每个控制器方法视图之间却不同。我目前正在做的事情如下:

<% content_for( :submenu ) do %>
    <%= render :partial => 'submenus/correct_submenu' %>
<% end %>

在方法的每个视图中

然后我的应用程序布局中有这个

<%= yield :submenu %>

但是,这感觉有点重复,对每个视图都这样做。每个控制器有没有办法做到这一点?

【问题讨论】:

    标签: ruby-on-rails actionview actioncontroller


    【解决方案1】:

    我的建议是为此制定一个约定,因此如果您有ProductsController,那么子菜单将为submenus/products_menu。这样你就可以编写一个看起来像这样的助手:

    def render_submenu
      content_for(:submenu) { render :partial => "submenus/#{controller.controller_name}_menu" }
    end
    

    然后您可以通过以下方式调用它:

    <%= render_submenu %>
    

    然后,您可以将其设为子菜单的默认 content_,并且仅在需要不同时指定内容。

    我希望这会有所帮助!

    【讨论】:

      【解决方案2】:

      使用nested layouts 将特定控制器的布局嵌套在应用程序布局下,方法是创建如下文件:

      # app/view/layouts/<controller_name>.html.erb
      <% content_for( :submenu ) do %>
        <%= render :partial => 'submenus/correct_submenu' %>
      <% end %>
      <%= render template: "layouts/application" %>
      

      使用此方法,您不必修改一堆视图文件。

      【讨论】:

        猜你喜欢
        • 2018-07-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多