我有这段代码
def evaluate(collection)
if collection.none?
[]
else
collection.group(@group).pluck(*@columns)
end
end
collection
是ActiveRecord::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
答案 0 :(得分:1)
找到一种方法来执行此操作而不触发查询。当您在某个关系上调用none
时,会将ActiveRecord::NullRelation
附加到该关系的extending_values
数组中:
> User.where(id: 1).extending_values.include?(ActiveRecord::NullRelation)
=> false
> User.where(id: 1).none.extending_values.include?(ActiveRecord::NullRelation)
=> true
答案 1 :(得分:0)
不确定是否可以,空关系和实际关系之间没有区别特征。也许走下救援路线:
begin
collection.group(@group).pluck(*@columns)
rescue #add exact Exception to catch
[]
end
不完全干净但是可以解决问题