我在布局中放置了一个子菜单,该子菜单因控制器而异,但不在每个控制器方法视图之间。我目前正在做的事情如下:
<% content_for( :submenu ) do %>
<%= render :partial => 'submenus/correct_submenu' %>
<% end %>
在方法的每个视图中
然后我的应用程序布局中有这个
<%= yield :submenu %>
然而,这感觉有点重复,对每个视图都这样做。每个控制器有什么方法可以做到这一点吗?
我在布局中放置了一个子菜单,该子菜单因控制器而异,但不在每个控制器方法视图之间。我目前正在做的事情如下:
<% content_for( :submenu ) do %>
<%= render :partial => 'submenus/correct_submenu' %>
<% end %>
在方法的每个视图中
然后我的应用程序布局中有这个
<%= yield :submenu %>
然而,这感觉有点重复,对每个视图都这样做。每个控制器有什么方法可以做到这一点吗?
我的建议是为此制定一个约定,因此如果您有一个,ProductsController那么子菜单将是submenus/products_menu. 这样你就可以编写一个看起来像这样的助手:
def render_submenu
content_for(:submenu) { render :partial => "submenus/#{controller.controller_name}_menu" }
end
然后,您可以通过以下方式调用它:
<%= render_submenu %>
然后,您可以将其设为子菜单的默认 content_,并且仅在需要不同时指定内容。
我希望这有帮助!
使用嵌套布局将特定控制器的布局嵌套在应用程序布局下,方法是创建如下文件:
# app/view/layouts/<controller_name>.html.erb
<% content_for( :submenu ) do %>
<%= render :partial => 'submenus/correct_submenu' %>
<% end %>
<%= render template: "layouts/application" %>
使用这种方法,您不必修改一堆视图文件。