2010-01-28 134 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" %> 

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