我真的不知道我在这里没有看到什么,因为它在我看来"如果错误"表现得像"如果是真的"。为了说清楚,我实际上截取了我的RubyMine 6.0.3屏幕截图。这个可能很简单,但对我来说肯定看起来很疯狂......
代码在DevicesController#update中。它有一个断点发生在"如果为假"不应该执行的陈述。在这张照片中看到我在if的第48行:
此时的变量转储如下所示,表示params [:device] [:chg_pwd],if条件为false。
那么,当条件为假时,为什么我在if语句中呢?
答案 0 :(得分:5)
"false"
为true
。你想要== "true"
在Ruby中,只有nil
和false
为假。有关详情,请参阅此gist
if params[:device][:chg_pwd] == "true"
根据您的具体情况,其他选项是
nil
或false
。那么你现有的代码就可以了。 ""
并与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"