2

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

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

在方法的每个视图中

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

<%= yield :submenu %>

然而,这感觉有点重复,对每个视图都这样做。每个控制器有什么方法可以做到这一点吗?

4

2 回答 2

9

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

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

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

<%= render_submenu %>

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

我希望这有帮助!

于 2010-01-28T16:47:08.877 回答
1

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

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

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

于 2014-08-18T20:20:48.670 回答