ActiveRecord ::关系问题检查nil? - Rails 3.1

时间:2011-11-07 09:27:17

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1

在下面的查询中,我将对象作为返回值(因此使用 .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确实令人困惑。

2 个答案:

答案 0 :(得分:7)

使用blank?nil?是真的,如果它真的是nilNilClass的单个实例),但是你的第二个例子总是会返回一个数组,也许是空的,如果没有结果,但仍然是一个阵列。 blank?检查空数组,空字符串,nil和false值。

如果您遇到blank?行为不符合预期的问题,可以查看first.nil?

答案 1 :(得分:3)

因为在第一种情况下,您尝试在第二种情况下检查实例Array并且数组不是nil,即使它是空的,也是Array。您应该使用empty?来检查这个!