Наследование шаблонов в 3.1 для контроллеров в пространстве имен
У меня есть application.html.erb как обычно в view /layout, с <% = yield%> для контента. Сейчас я пишу страницу настроек для учетных записей пользователей, которая содержит множество различных страниц (профиль, учетная запись, уведомления и т. Д.).
Контроллеры /settings_controller.rb
class SettingsController < ApplicationController
end
Контроллеры / Настройки /account_settings_controller.rb
class Settings::AccountSettingsController < ApplicationController
end
Контроллеры / Настройки /profile_settings_controller.rb
class Settings::ProfileSettingsController < ApplicationController
end
Для каждого контроллера, который является частью пространства имен "Настройки", я бы хотел "всегда отображать представление", в частности views/settings/master.html.erb, который содержит
<markup>
<%= yield(:settings_content) %>
</markup>
Так, например, представление settings/profile_settings/edit.html.erb будет содержать
<% content_for(:settings_content) do %>
<markup>
</markup>
<% end %>
Я не уверен, с чего начать. Возможно, мои контроллеры должны выглядеть
class Settings::AccountSettingsController < SettingsController
end
Любое руководство приветствуется.
РЕДАКТИРОВАТЬ:
Rendered settings/account_settings/edit.html.erb within layouts/application (19.6ms)
должен стать
Rendered settings/master.html.erb within layouts/application (19.6ms)
Rendered settings/account_settings/edit.html.erb within settings/master (19.6ms)
2 ответа
Я предлагаю использовать это, чтобы иметь основной макет с вложенными вложенными макетами, используя haml:
добавьте этот метод в ваш application_helper.rb
# Allows easy using nested layouts
def inside_layout(layout = 'application', &block)
render :inline => capture_haml(&block), :layout => "layouts/#{layout}"
end
макеты / application.html.haml
!!!
%html
%head
-# your header content
%body
.content
= yield
макеты / single_column.html.haml
= inside_layout do
.middle
= yield
макеты / two_column.html.haml
= inside_layout do
.left
-# your shared left content
.right
= yield
макеты столбцов теперь можно использовать как обычные макеты, но они вложены в основной выход. вы можете даже создать больше макетов, вложенных во вложенные макеты, если вы назовете макет в вызове inside_layout.
Надеюсь, поможет:)
Запишите layout / settings/master в settings_controller, и вам нужно наследовать контроллеры пространства имен от этого