在Ruby on Rails中,将locals传递给视图,默认为true,将不适用于|| =

时间:2010-09-22 00:39:15

标签: ruby-on-rails ruby default-value

如果代码是

do_more ||= true

然后传入false时,它变为

do_more = false || true

因此仍然是真的。那么这是foo ||= default_value不起作用的一种情况?在这种情况下,它需要

do_more = true if !defined? do_more

1 个答案:

答案 0 :(得分:0)

更一般地说,如果foo的有效值为false,则foo ||= default_value永远不会有效。

所有有效值被解释为布尔值TRUE时,

foo ||= default_value才是有效模式。

您对do_more == true if !defined? do_more的陈述应该使用赋值运算符,我假设一个拼写错误:do_more = true if !defined? do_more

也许更好的是do_more = true unless defined? do_more

对我来说这看起来不错,但您需要进行测试以确保其正常工作。

如果你的param是从HTML表单进来的,那么未定义的case实际上是一个零长度的字符串,“”。如果这是你的情况,那么你想要:

do_more = true if do_more == ''

我还建议发表评论#set default