【发布时间】:2011-01-04 20:34:29
【问题描述】:
如果渲染部分时没有在 :locals 哈希中明确定义值,我在部分模板中使用以下语法为局部变量设置默认值 --
<% foo = default_value unless (defined? foo) %>
直到最近,这似乎工作得很好,当时(我无法辨别)未传递的变量开始表现得好像它们已被定义为 nil(而不是未定义)。
正如各种乐于助人的人在 SO 上指出的那样,http://api.rubyonrails.org/classes/ActionView/Base.html 说 不 使用
defined? foo
改为使用
local_assigns.has_key? :foo
我正在尝试修改我的方式,但这意味着要更改很多模板。
我可以/是否应该提前收费并在所有模板中进行此更改?我需要注意什么技巧吗?我需要多努力地测试每一项?
【问题讨论】:
-
这个问题已经很老了,所有的答案似乎都已经过时了,因为现在的Action View documentation,特别说可以用
definded? foo:"另外,你也可以用defined ? 使用前先检查变量是否已赋值的标题。”