Наследование шаблонов в 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, и вам нужно наследовать контроллеры пространства имен от этого

Другие вопросы по тегам