3.1中的模板继承用于命名空间中的控制器

时间:2011-07-18 08:46:16

标签: ruby-on-rails templates ruby-on-rails-3.1 template-inheritance

我像往常一样在views / layouts中有一个application.html.erb,<%= 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

对于属于Settings命名空间的每个控制器,我想“始终呈现视图”,特别是包含

的views / settings / master.html.erb
<markup>
  <%= yield(:settings_content) %>
</markup>

例如,视图设置/ 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 个答案:

答案 0 :(得分:0)

在settings_controller中写布局'设置/主,你需要从这个继承命名空间的控制器

答案 1 :(得分:0)

我建议使用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调用中命名布局,甚至可以创建嵌套在嵌套布局中的更多布局。

希望它有所帮助:)