2015-08-18 50 views
0

我希望能夠在部分中構建查詢,而不需要在Ruby on Rails中稍後再評估最終語句。有沒有辦法推遲ActiveRecord查詢(如Django中的QuerySet)?

具體地說這種行爲(從Djano文檔複製):

一個QuerySet可以被構造,過濾,切片,並 通常通過周圍而不實際命中數據庫。沒有 數據庫活動實際上發生,直到您做一些事情來評估 queryset。

回答

2

這是默認情況下的工作方式,除非您訪問結果。也就是說,你可以把這個到你的控制器:

@widgets = Widget.enabled 
@widgets = @widgets.where(foo: 'bar') 
# ... more conditions here if you want ... 

,然後在視圖中把這個:

<%- @widgets.each do |w| %> 
    ... 
<% end %> 

的DB查詢將不會運行,直到@widgets.each線。

您可以在控件中使用logger.info語句來測試該查詢,以查看實際執行查詢的位置。

+0

你說得對。我從來沒有意識到這一點,因爲控制檯不這樣工作。 – Bowen

相關問題