我想查看下面的内容:
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)
如何检查轨道上红宝石的上述条件?
错误消息说明了一切.确保,param确实存在.您尝试将nothing(NilClass
)与数字进行比较.(这实际上是一个字符串,这将是你的下一个问题)
可能正确的是:
if params[:hidval].present? && params[:hidval] > 0
# Do something ...
end
Run Code Online (Sandbox Code Playgroud)
从 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"
让这值得……但这只是一个风格问题。