Ruby Rails" if"条件为" false"实际执行?

时间:2014-04-11 06:50:05

标签: ruby-on-rails ruby

我真的不知道我在这里没有看到什么,因为它在我看来"如果错误"表现得像"如果是真的"。为了说清楚,我实际上截取了我的RubyMine 6.0.3屏幕截图。这个可能很简单,但对我来说肯定看起来很疯狂......

代码在DevicesController#update中。它有一个断点发生在"如果为假"不应该执行的陈述。在这张照片中看到我在if的第48行: enter image description here

此时的变量转储如下所示,表示params [:device] [:chg_pwd],if条件为false。
enter image description here

那么,当条件为假时,为什么我在if语句中呢?

3 个答案:

答案 0 :(得分:5)

红宝石中的

"false"true。你想要== "true"

在Ruby中,只有nilfalse为假。有关详情,请参阅此gist

if params[:device][:chg_pwd] == "true"

根据您的具体情况,其他选项是

  1. 设置为nilfalse。那么你现有的代码就可以了。
  2. 设置为""并与blank?核对,作为RSB答案的先前版本 过去常说,这只是Rails,并且确实涉及一个小的 语义差异(空白与错误)

答案 1 :(得分:2)

返回"false",这是string,因此返回true

if params['is_admin'] == 'true'
# YOUR CODE goes HERE
end

答案 2 :(得分:1)

使用此而不是“false”,因为“false”是一个字符串而不是代码中的布尔值

if params[:devise][:chg_pwd].eql?("false")
  # code
else
  # code
end

这可以更好地解释

2.0.0p247 :012 > if "true"
2.0.0p247 :013?>   p "hello"
2.0.0p247 :014?>   end
"hello"
 => "hello" 
2.0.0p247 :015 > if "false"
2.0.0p247 :016?>   p "hi"
2.0.0p247 :017?>   end
"hi"
 => "hi"