2016-07-06 42 views
0

我想知道是否可以將模型實例方法用作where子句查詢。我的意思是。我有一個方法的示範學校規定在where子句中使用方法Rails Ruby Active Record

class School < ActiveRecord::Base 

    def my_method 
    users.where(blablabla).present? 
    end 

end 

它是更多鈔票要達到這樣的:

School.all.where(my_method: true) 

我知道我可以這樣做:

School.all.map{|x| x if x.my_method} 

但是這樣一來與查詢相比,在性能上有巨大的懲罰。此外,我正在搜索的返回是一個ActiveRecord關係和映射返回一個數組。

UPDATE:

也有另一種方式來做到這一點,如:

School.all.joins(:users).where("users.attribute = something") 

但這不適合正是我想要的有以下幾個原因。

在此先感謝

+0

有你通過導軌要去範圍,請通過它去。這是可能是你正在尋找http://stackoverflow.com/questions/4869994/什麼是範圍命名的範圍在軌道 – chaitanya

+0

如果你能說出你的方法應該達到什麼,你的問題可能會更容易消化。你應該爲他們解釋你的設計決定。您是否嘗試評估某個方法並將其結果發送到「where」,或者您是否試圖爲「where」動態創建條件。 – 2016-07-06 11:08:15

回答

1

我真的不知道你的模型之間的關係。

但where子句獲得鍵值的哈希值。 所以你可以舉個例子來返回用戶的ID,然後使用它。

def my_method 
    {user_id: users.where(blablabla).ids} 
end 

,並使用它:

School.all.where(my_method) 
相關問題