在轨道上使用nil或[] 2.3.8

时间:2010-11-15 20:02:06

标签: ruby-on-rails

我的rails应用程序(2.3.8)

我的情况很奇怪

我想为控制器中的某个变量分配一个 no nil 值,所以我写了这段代码:

@myValue = session[:value] or []

在我看来,我写道:

<%= @myvalue.size %>

当我显示我的页面时,我有一个零错误。

我在IRB中尝试了nil或[],我得到了[]。所以我的问题是,是否有人知道为什么在rails中工作不同?

P.S。:我使用的唯一宝石是3.3.3版本的电池。

谢谢!

3 个答案:

答案 0 :(得分:4)

'或'关键字的优先级太低,无法使用此代码。使用'||'代替。为了证明这一点:

ruby-1.9.2-p0 > a = nil or true; a
 => nil 
ruby-1.9.2-p0 > a = nil || true; a
 => true 

答案 1 :(得分:3)

这是一个操作顺序。

@myValue = (session[:value] or [])会奏效。我相信@myValue = session[:value] or []被解释为(@myValue = session[:value]) or []。但是@myValue = session [:value] || []没有parens也工作。 ||的优先级高于or

答案 2 :(得分:2)

成语是session[:value] || []使用||,而不是or。您也可以尝试session[:value].to_a。这有效,因为nil.to_a变为[]