我想查看以下内容:
if params[:hidval] > "0"
OR
if !params[:hidval] < "1"
但它在下面给了我错误:
undefined method `>' for nil:NilClass
如何检查轨道上红宝石的上述条件?
答案 0 :(得分:7)
错误消息说明了一切。确保,param确实存在。您尝试将任何内容(NilClass
)与数字进行比较。 (这实际上是一个字符串,这将是你的下一个问题)
可能正确的是:
if params[:hidval].present? && params[:hidval] > 0
# Do something ...
end
答案 1 :(得分:2)
试试此代码
if params[:hidval].present?
if params[:hidval].to_i > 0
# Greater than 0 condition
else
# Less than equal to 0 condition
end
end
答案 2 :(得分:2)
从Ruby 2.3开始,您可以使用安全导航操作符&.
来简化此操作:
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
这通常会为您提供所需的内容(例如条件分支),因为nil
是错误的。但是请记住,如果您实际上依赖确切的false
值。
&.
意味着仅在前导对象不为null时才调用尾随方法。在像这样的链接方法调用中,它更有意义:
user&.deactivate!
但是,由于大于运算符>
实际上是Ruby中的方法,因此它在这里也能正常工作。
就我个人而言,我不相信params[:hidval] &.> "0"
的痛苦美感使这值得...但那只是风格问题。
答案 3 :(得分:0)
重新阅读此问题,我意识到我错过了第一个答案的分数。它回避了问题,但没有解决。
您看到此错误的真正问题是您可能将!
放在错误的位置。
如果您的意思是if it is not less than "1"
,则应输入:
if !( params[:hidval] < "1" )
这将比较hidval和“ 1”,然后对结果求反。
您发布的内容:
if !params[:hidval] < "1"
...首先对hidval求反(通常导致false
),然后比较false
(或可能为true
)以查看其是否小于“ 1”。将false
与字符串进行比较不仅没有多大意义,而且实际上还会出现此错误:
NoMethodError (undefined method `<' for false:FalseClass)