render:inline => “<%= yield%>”不工作

时间:2011-02-03 14:19:09

标签: ruby-on-rails-3 upgrade

我正在从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中非常有效。

2 个答案:

答案 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语句。