Ruby on rails 如何使用液体模板语言在布局中呈现模板?

Ruby on rails 如何使用液体模板语言在布局中呈现模板?,ruby-on-rails,liquid,Ruby On Rails,Liquid,我试图在液体布局中呈现液体模板(液体模板lang,而不是CSS液体布局)。我似乎无法获得要渲染的布局部分。目前正在使用: assigns = {'page_name' => 'test'} @layout = Liquid::Template.parse(File.new(@theme.layout.path).read) @template = Liquid::Template.parse(File.new(self.template.path).read) @rend_temp =

我试图在液体布局中呈现液体模板(液体模板lang,而不是CSS液体布局)。我似乎无法获得要渲染的布局部分。目前正在使用:

assigns = {'page_name' => 'test'}
@layout = Liquid::Template.parse(File.new(@theme.layout.path).read)
@template = Liquid::Template.parse(File.new(self.template.path).read)

@rend_temp = @template.render(assigns)
@rend_layout = @layout.render({'content_for_layout' => @rend_temp})

render :text => @rend_layout, :content_type => :html

生成的页面HTML显示“模板”以liquid fine呈现,但它没有用布局进行包装(用呈现的模板替换布局中的“内容”来表示布局)

为了让其他人知道谁遇到了这个问题,上面发布的代码实际上是有效的,问题在于名为@template的变量。我将@template和@layout重命名为@u tempalte,并且@u layout和所有东西都按预期工作。

对于在ruby on rails(特别是rails 3)中使用liquid,我相信呈现liquid模板的正确方法(以及维护rails为您所做的所有工作)如下所示

liquid gem本身为rails提供了一个liquid_视图,因此您可以在调用#render时连接rails以查找“liquid”模板。此视图仅适用于rails 2.3 但是,通过进行以下更新,可以轻松地进行更新以使用rails 3

if content_for_layout = @view.instance_variable_get("@content_for_layout")
  assigns['content_for_layout'] = content_for_layout
elsif @view.content_for?(:layout)
  assigns["content_for_layout"] = @view.content_for(:layout)
end
assigns.merge!(local_assigns.stringify_keys)
这可以在这里看到-->

然后,要正确渲染液体视图,只需调用

render :template => "index", :layout => "my_layout", :locals => { liquid_drop1 => drop, liquid_drop2 => drop }
在我们的应用程序中,由于我们有一些常见的液体属性,我们已经覆盖了基本控制器中的“render”方法,通过引用#liquid_view_赋值自动包含默认局部变量,该赋值为render调用添加了额外的液滴

def render(...)
  options[:locals] = options.fetch(:locals, {}).merge(liquid_view_assigns)
  super
end

是的,但是有一些模板查找和其他从rails继承的好东西被劫持了,这些东西是您用上面的代码放弃的。虽然它可以工作,但在风格或功能上并不完全是“rails风格”。