具有"假"条件的Ruby Rails"if"实际执行?

Ric*_*d_G 2 ruby ruby-on-rails

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

代码在DevicesController#update中.它有一个断点,发生在不应该执行的"if false"语句中.在这张照片中看到我在if的第48行: 在此输入图像描述

此时的变量转储如下所示,表明params [:device] [:chg_pwd](if条件)为false.
在此输入图像描述

那么,为什么我在这个if语句中它的条件是假的?

Kar*_*k T 5

"false"true红宝石.你要== "true"

在Ruby中,只有nil并且false是假的.更多信息,您可以阅读这个要点

if params[:device][:chg_pwd] == "true"
Run Code Online (Sandbox Code Playgroud)

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

  1. 设置为nil,或false.那么你现有的代码就可以了.
  2. 设置为""blank?作为RSB之前版本的答案进行检查,但这只是Rails,并且确实涉及一个小的语义差异(空白与错误)