我正在从Rails 2.3.8升级到3.0.3并注意到我的嵌套布局代码无效。
在我的主应用程序布局中,我有一行
<%= controller.sub_layout%>
然后查看控制器,谁拥有:
def sub_layout
render :inline => "<%= yield %>"
# or otherwise some partial for the sub-layout
end
问题是,这不会被渲染!如果我直接&lt;%= yield%&gt;在布局中声明,它确实有效。所以问题是,这里发生了什么,我该如何解决?
这在Rails 2.3.8中非常有效。
答案 0 :(得分:0)
一个更加理智的方法怎么样:
render :layout => false
相关:http://guides.rubyonrails.org/layouts_and_rendering.html#using-render
答案 1 :(得分:0)
所以你们都有更多的背景知识,整个子布局方法基于这篇博文:Sorta Nested Layouts(解决方案在评论部分给出。)
使用子布局的任何控制器都需要定义一个设置变量的before_filter方法,而不是使用控制器方法sub_layout:
def inner_layout
@inner_layout = 'layouts/sublayout_partial_name'
end
然后在主layout.html.erb(即application.html.erb)中,否则你将把你的yield语句放在:
<%= @inner_layout ? render(:partial => "#{@inner_layout}") : yield %>
这个假设是sublayout部分文件会在某处有自己的yield语句。