我有一個模型,在本例中我們稱其爲Product
模型。我在這個數據庫中有大約200k條記錄,其中一半是active
(active: true
),一半不是。當用戶正在搜索產品時,我只希望顯示活動的產品。我的代碼看起來是這樣的:Rails:如何在不將內容加載到內存中的情況下過濾搜索結果
def self.search
products = Products.where(active: true).order("`foo` = 'BAR'")
products = products.where(other_filters)
products = products.where(more_filters)
..
end
這樣做加載第一個10萬點活躍的到內存(做第一where
回報100000
後puts products.size
),然後這些帶有鏈接where
條款和過濾下降了約20次以上最後分頁顯示,只顯示25。有沒有更有效的方法來過濾這些結果?
您是否使用了一些ORM,比如ActiveRecord?您可以鏈接.where來確保數據庫只返回匹配所有過濾器的數據庫。 –
在ActiveRecord鏈接'.where'創建一個單一的查詢。您還可以使用['.merge'](http://api.rubyonrails.org/classes/ActiveRecord/SpawnMethods.html#method-i-merge)將範圍合併在一起。你真的只是在尋找一種不太笨重的方法來解決它嗎? – max