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_forにして、異なる必要がある場合にのみコンテンツを指定できます。

これがお役に立てば幸いです。

于 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 に答える