我正在将rails 2应用程序迁移到rails 3.在执行此操作时,我遇到了一个带有yield的wiered行为。 我有一个代码片段,我得到yield的返回值。
x= true if yield 'xyz'
因此,如果'xyz'存在content_for,则x的值将设置为true,否则不会发生任何事情。它在rails 2中运行良好。但是在rails 3中,总是设置为x,因为即使'xyz'不可用, rails也会返回一个空字符串。
在Rails 2中:
yield 'xyz' # nil if xyz is not available
yield 'xyz' # "hi" if xyz is available. "hi" is the rendered content
在Rails 3中:
yield 'xyz' # "" if xyz is not available
yield 'xyz' # "hi" if xyz is available. "hi" is the rendered content
为什么会有这种变化? render_template是否已完全更改?
答案 0 :(得分:0)
我无法回答你的问题,但我建议使用这种方法:
if content_for?(:xyz)
yield(:xyz)
x = true
end