2013-10-21 115 views
1

我有此代码ActiveRecord无?方法火灾查询

def evaluate(collection) 
    if collection.none? 
    [] 
    else 
    collection.group(@group).pluck(*@columns) 
    end 
end 

collectionActiveRecord::Relation对象 - 例如为User.where(:name => 'Killer')

现在有时我也通过Rails 4无关系Users.none,这就是为什么检查没有。如果我不检查none?,则调用pluck会抛出参数异常。

问题是每当我查询none?的任何关系时,它都会执行查询。看到这里:

> User.where(id: 1).none? 
User Load (0.2ms) SELECT "users".* FROM "v1_passengers" WHERE  "users"."id" = 1 
=> false 

> User.where(id: 1).none.none? 
=> true 

我不想执行查询只是为了检查没有。任何解决方法?

更新:none?方法实际上是数组方法,这就是为什么查询被执行。这就像在关系上打电话to_a。我想知道的是如何确定关系是否为none

+2

你怎么能指望知道,如果没有或没有符合您查询*不*查询任何记录? – nicooga

+0

我的不好。 。没有?实际上是数组方法。如果没有关于 – ShadyKiller

+0

的号召,我可以不知道为什么你需要这样做? 'collection.group(@group).pluck(* @ columns)'如果之前在集合中包含'none'会抛出一个错误? – tihom

回答

0

不知道你可以,在空关系和实际关系之间没有区别特征。也许下井营救路线:

begin 
    collection.group(@group).pluck(*@columns) 
rescue #add exact Exception to catch 
    [] 
end 

不完全是干净的,但得到全面找到一个方法来做到这一点不费一枪查询问题

1

。当您在关系称之为none它追加ActiveRecord::NullRelationextending_values阵列的关系:

> User.where(id: 1).extending_values.include?(ActiveRecord::NullRelation) 
=> false 

> User.where(id: 1).none.extending_values.include?(ActiveRecord::NullRelation) 
=> true