2013-10-21 116 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