Избежание повторяющихся «content_for» в представлениях - PullRequest
2 голосов
/ 28 января 2010

В моем макете размещено подменю, которое отличается от контроллера к контроллеру, но не между представлениями каждого метода контроллера. Что я сейчас делаю, так это:

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

В каждом представлении для метода

В макете моих приложений есть это

<%= yield :submenu %>

Тем не менее, это выглядит как повторение, делая это для каждого представления. Есть ли способ сделать это для каждого контроллера?

Ответы [ 2 ]

9 голосов
/ 28 января 2010

Я предлагаю иметь соглашение для этого, поэтому, если у вас есть ProductsController, то подменю будет submenus/products_menu. Таким образом, вы можете написать помощник, который выглядит так:

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

Затем вы можете вызвать это, выполнив:

<%= render_submenu %>

Затем вы можете сделать это содержимым по умолчанию для подменю и указать содержимое только в том случае, если оно должно быть другим.

Надеюсь, это поможет!

1 голос
/ 19 августа 2014

Используйте вложенные макеты , чтобы вложить макет конкретного контроллера в макет приложения, создав файл, подобный следующему:

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

С этим методом вам не нужно изменять кучу файлов просмотра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...