在下面的查询中,我将对象作为返回值(因此使用 .nil?检查没有结果可以正常工作:
store = Store.where(:some_id => myobj.some_id.to_i).first
unless store.nil?
但是在下一个代码中,我得到ActiveRecord :: Relation的返回类型,并使用 .nil?进行检查失败!
existing_store = Store.where(:some_str => myobj.some_str).not_hidden().active()
if existing_store.nil?
1。为什么?
2。在这种情况下,如何检查无结果?
第3。使用find()或where()
时,如何检查一般没有记录返回Rails 3.1确实令人困惑。
答案 0 :(得分:7)
使用blank?
,nil?
是真的,如果它真的是nil
(NilClass
的单个实例),但是你的第二个例子总是会返回一个数组,也许是空的,如果没有结果,但仍然是一个阵列。 blank?
检查空数组,空字符串,nil和false值。
如果您遇到blank?
行为不符合预期的问题,可以查看first.nil?
答案 1 :(得分:3)
因为在第一种情况下,您尝试在第二种情况下检查实例Array
并且数组不是nil
,即使它是空的,也是Array
。您应该使用empty?
来检查这个!