我的布局中有一个子菜单,它与控制器不同,但不是每个控制器方法视图之间。我目前正在做的是:
<% content_for( :submenu ) do %>
<%= render :partial => 'submenus/correct_submenu' %>
<% end %>
在方法的每个视图中
我的应用程序布局中有这个
<%= yield :submenu %>
然而,这对于每个视图都是重复的。有没有办法按控制器执行此操作?
答案 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" %>
使用此方法,您无需修改大量视图文件。