我遇到了一个我无法弄清楚的简单情况。
我必须决定是否显示“更多”链接,具体取决于文章计数。
代码很简单:
@no_more = offset + length >= Article.count
@no_more
变量有时等于nil。我在调试器中看到offset = 0
,length = 10
和Article.count = 12
但上面的表达式为nil。
即使这样也无济于事:
@no_more = false if @no_more.nil?
@no_more
仍然是零。
为什么它会像这样?
答案 0 :(得分:1)
怎么样没有 - 不是作业?
ruby-1.8.7-p299 > @no_more
=> nil
ruby-1.8.7-p299 > !!@no_more
=> false
ruby-1.8.7-p299 > @no_more = true
=> true
ruby-1.8.7-p299 > !!@no_more
=> true
答案 1 :(得分:0)
你需要括号:
@no_more = ((offset + length) >= Article.count)
如果没有它们,优先级就会很奇怪,所以Ruby以这种方式解释你的代码。
答案 2 :(得分:0)
确保您没有在控制器或视图中的其他位置重置@no_more变量,尤其是在进行重定向时。
答案 3 :(得分:0)
尝试打印@no_more.class并检查它是否真的是NilClass而不是FalseClass。
我说这是因为前几天我遇到了同样的问题。这与netbeans中的调试器(以及jruby)有关,但是调试器似乎不理解FalseClass。
例如此代码:
p = false
puts p.class
对我来说,这个当然打印了FalseClass,但是调试器坚持p是NilClass。我确认“kind_of?”它确实是一个FalseClass。
您可以尝试检查相同的内容。
@no_more.kind_of?(FalseClass)
我以为我会提到这件事,以防我遇到同样的问题。它让我半夜忙着试图找出wtf正在进行中。