如何检查轨道上红宝石的大于和小于条件'

use*_*r88 -1 ruby-on-rails

我想查看下面的内容:

if params[:hidval] > "0"
OR
if !params[:hidval] < "1"
Run Code Online (Sandbox Code Playgroud)

但它给了我错误如下:

undefined method `>' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)

如何检查轨道上红宝石的上述条件?

Seb*_*mba 7

错误消息说明了一切.确保,param确实存在.您尝试将nothing(NilClass)与数字进行比较.(这实际上是一个字符串,这将是你的下一个问题)

可能正确的是:

if params[:hidval].present? && params[:hidval] > 0
 # Do something ...
end
Run Code Online (Sandbox Code Playgroud)


Dav*_*mpy 7

从 Ruby 2.3 开始,您可以使用 Safe Navigation Operator&.来简化此操作:

irb(main):028:0>   5 > 0
=> true
irb(main):029:0> nil > 0
NoMethodError: undefined method '>' for nil:NilClass
    from (irb):29
irb(main):030:0>   5 &.> 0
=> true
irb(main):031:0> nil &.> 0
=> nil
irb(main):032:0>   5 &.> 99
=> false
Run Code Online (Sandbox Code Playgroud)

这通常会得到你想要的(例如条件分支),因为它nil是错误的。但如果您实际上依赖于一个确切的值,请记住这一点false

&.意味着仅当前导对象不为 null 时才调用尾随方法。它在链式方法调用中更有意义,例如:

user&.deactivate!
Run Code Online (Sandbox Code Playgroud)

但是,由于大于运算符实际上>是Ruby 中的一种方法,因此它在这里也适用。

就我个人而言,我不相信痛苦的美学params[:hidval] &.> "0"让这值得……但这只是一个风格问题。