Rails产生和content_for部分

时间:2013-03-11 12:40:59

标签: ruby-on-rails ruby layout partial-views yield

我习惯使用content_foryield来查看我的观点,以便设置与视图渲染相关的页面标题和其他整洁的内容。

现在我陷入了下一个计划:布局 - > VIEW(edit.html.erb) - > PARTIAL(_main.html)。那是 - 视图包含部分。

如果我在部分中定义content_for :view_content_title, "Hello World",则可以在LAYOUT中访问它,但在视图中 NOT - content_for?(:view_content_title)

为什么?我该怎么办呢?

2 个答案:

答案 0 :(得分:9)

我想我发现了原因。 Rails以线性方式呈现视图。它在部分之前呈现视图,然后是部分视图,然后是视图的其余部分。我测试过,如果你在渲染部分之后调用content_for?或在视图中渲染内容 - 就可以了,如果之前 - 内容不存在。

并且在视图之后呈现布局,这就是为什么在那时内容已经可用,因为视图和部分已经被渲染,例如指令已执行。

答案 1 :(得分:1)

一种可行的解决方法是布局可以访问:locals ,因此您可以执行以下操作:

<强> view_file.html.erb

<%= render partial: "my_partial", layout:"my_layout", locals:{:title=>"Best Answer Ever"} %>

<强> _my_layout.html.erb

<H1> <%= title %> </H1>
<%= yield %>

<强> _my_partial.html.erb

All your content goes here, and this partial also has access to locals if you want to use them.

这将产生:

<H1>Best Answer Ever</H1>
All your content goes here, and this partial also has access to locals if you want to use them.