避免在视图中重复“content_for”

时间:2010-01-28 16:31:22

标签: ruby-on-rails actionview actioncontroller

我的布局中有一个子菜单,它与控制器不同,但不是每个控制器方法视图之间。我目前正在做的是:

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

在方法的每个视图中

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

<%= yield :submenu %>

然而,这对于每个视图都是重复的。有没有办法按控制器执行此操作?

2 个答案:

答案 0 :(得分:9)

我的建议是要有一个约定,所以如果你有一个ProductsController那么子菜单将是submenus/products_menu。这样你就可以编写一个看起来像这样的帮助器:

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

然后你可以这样做:

<%= render_submenu %>

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

我希望这有帮助!

答案 1 :(得分:1)

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

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

使用此方法,您无需修改​​大量视图文件。