3

我已经习惯使用content_forandyield为我的视图设置页面标题和其他与视图渲染相关的整洁的东西。

现在我陷入了下一个方案:LAYOUT -> VIEW (edit.html.erb) -> PARTIAL (_main.html)。即 - 视图包含一个部分。

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

为什么 ?我该怎么办?

4

2 回答 2

9

我想我找到了原因。Rails 以线性方式呈现视图。它先渲染部分视图,然后渲染部分视图,然后渲染视图的其余部分。我测试过,如果您content_for?在渲染部分之后调用或渲染视图中的内容 - 没关系,如果之前 - 内容不存在。

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

于 2013-03-11T12:56:41.337 回答
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.
于 2015-09-03T04:18:56.497 回答