Rails中的多级嵌套布局3

jes*_*iss 14 ruby layout ruby-on-rails

我有一个应用程序与全局应用程序布局文件application.html.haml.然后,我有多个"控制器堆栈":用于我们的主站点,管理门户和我们的业务站点.对于其中的每一个,控制器都在一个模块中,并且都是从模块继承的BaseController.每个堆栈都有自己的布局文件.在堆栈中,一些控制器也具有布局文件.

我希望所有视图(除非另有说明)在嵌套布局的多个级别内呈现:application,"stack","controller".

例如,对于Site::BlogController#show动作,我想要rails渲染:

/site/blog/show.html.haml/layouts/site/blog.html.haml里面/layouts/site.html.haml里面/layouts/application.html.haml

我很难理解如何插入/layouts/site.html.haml堆栈.看起来好像是自动的,rails会在应用程序布局中的控制器布局内呈现动作,但是,我看不到如何将布局"插入"渲染堆栈.

任何帮助都非常感谢,但是,我已经阅读了所有的rails指南都无济于事,所以链接到http://guides.rubyonrails.org/layouts_and_rendering.html#using-nested-layouts并没有多大帮助.

jes*_*iss 19

我重读了我发布的链接(http://guides.rubyonrails.org/layouts_and_rendering.html#using-nested-layouts),并意识到我错过了一个关键细节.

<%= render :file => 'layouts/application' %>
Run Code Online (Sandbox Code Playgroud)

所以,在Site::BaseController我有一个电话layout 'site',/layouts/site.html.haml我有

= content_for :footer do
   -#Content for footer
= render :file => 'layouts/application'
Run Code Online (Sandbox Code Playgroud)

然后,在Site::BlogController延伸Site::BaseControllerlayout 'site/blog'/layouts/site/blog.html.haml我有

=content_for :header do
  %h1 HELLO WORLD!

= render :file => 'layouts/site'
Run Code Online (Sandbox Code Playgroud)

然后,这将按照问题中的描述呈现嵌套布局.很抱歉在我的问题中遗漏了这个.我应该仔细阅读.


Sev*_*ich 9

如果您创建这样的帮助:

# renders a given haml block inside a layout
def inside_layout(layout = 'application', &block)
  render :inline => capture_haml(&block), :layout => "layouts/#{layout}"
end
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样定义子布局:

= inside_layout do
  # nested layout html here
  = yield
Run Code Online (Sandbox Code Playgroud)

这些布局可以像普通布局一样使用.

更多:http://www.requests.ch/blog/2013/10/30/combine-restful-rails-with-nested-layouts/