2010-01-28 56 views
2

我有一个子菜单放置在我的布局中,不同于控制器到控制器,但不是在每个控制器方法视图之间。什么我目前做的是以下几点:在视图中避免重复的“content_for”

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

在每个视图的方法

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

<%= yield :submenu %> 

然而,这种感觉那种重复,做它为每个视图。每个控制器有没有办法做到这一点?

回答

9

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

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

然后,您可以通过做调用这个:

<%= render_submenu %> 

然后,您可以把它设成默认content_for子菜单,并只能指定如果内容需要有所不同。

我希望这有助于!

1

使用nested layouts窝特定的控制器的应用程序布局下的布局,通过创建一个文件,像这样:

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

使用这种方法,你不必修改一堆查看文件。