我习惯使用content_for
和yield
来查看我的观点,以便设置与视图渲染相关的页面标题和其他整洁的内容。
现在我陷入了下一个计划:布局 - > VIEW(edit.html.erb) - > PARTIAL(_main.html)。那是 - 视图包含部分。
如果我在部分中定义content_for :view_content_title, "Hello World"
,则可以在LAYOUT中访问它,但在视图中 NOT - content_for?(:view_content_title)
为什么?我该怎么办呢?
答案 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.