Наследование шаблонов в 3.1 для контроллеров в пространстве имен - PullRequest
1 голос
/ 18 июля 2011

У меня 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

Любое руководство приветствуется.

EDIT:

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 ]

0 голосов
/ 15 мая 2012

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

, добавьте этот метод в ваш application_helper.rb

  # Allows easy using nested layouts
  def inside_layout(layout = 'application', &block)
    render :inline => capture_haml(&block), :layout => "layouts/#{layout}"
  end

layouts / application.html.haml

!!!
%html
  %head
    -# your header content
  %body
    .content
      = yield

layouts / single_column.html.haml

= inside_layout do
  .middle
    = yield        

layouts / two_column.html.haml

= inside_layout do
  .left
    -# your shared left content
  .right
    = yield        

теперь можно использовать макеты столбцов как обычномакеты, но они вложены в мастер выход.вы даже можете создать больше макетов, вложенных во вложенные макеты, если вы назовете макет в вызове inside_layout.

надеюсь, это поможет:)

0 голосов
/ 20 июля 2011

запись layout 'settings / master в settings_controller, и вам нужно наследовать контроллеры пространства имен от этого

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