0

我有兩個has_many模型屬於關係。Rails所有包含最後一行的聯合關係

Scheme has_many navs 

我需要使用最後一個導航值來獲取所有方案。我有10個方案,每個方案有大約100k的導航,但我只需要最後一個記錄,即當前值。

隨着預先加載會加載所有的資產淨值

Scheme.all.includes(:navs) 

如何申請條件,以獲得資產淨值的只有最後一排的同時,預先加載每個方案。

更新日誌

如果我運行

Scheme.includes(:current_nav).limit(3) 

這些都是AR

SELECT `schemes`.* FROM `schemes` LIMIT 3 
SELECT `navs`.* FROM `navs` WHERE `navs`.`schemeCode` IN ('D04', 'D01', 'D30') ORDER BY id DESC 

如何第二查詢的工作執行的查詢,將採取一切他們的資產淨值schemeCode屬於list並按照DESC的順序排列,但它將如何與特定的方案完全關聯。

回答

3

如何創建一個相互關聯起來是這樣的:

class Scheme < ActiveRecord::Base 
    has_one :current_nav, -> { order('id DESC').limit(1) }, class_name: 'Nav' 
end 

現在,您可以:

Schema.includes(:current_nav).all 

或:

Schema.includes(:current_nav).last(10) 

將被查詢計劃的渴望負載僅最新資產淨值。

說明includes是從ActiveRecord中從數據庫檢索對象的方法之一。從文檔本身:

活動記錄讓您預先指定要加載的所有關聯 。這可以通過指定包含Model.find調用的 方法來實現。使用包含,Active Record確保 所有指定的關聯都使用最少的 加載數量的查詢加載。

而且,由於我們有關聯安裝與current_nav,所有我們做的是與includes用它急於加載數據。請閱讀ActiveRecord querying doc瞭解更多信息。

+0

我編輯我的問題與我的懷疑。謝謝你的努力。 – Senthil 2014-10-28 14:22:29

+1

它是否按照您期望的方式工作?我會盡快添加解釋。 – Surya 2014-10-28 16:07:23

+1

它取得的結果,但如果你給解釋,它將是非常偉大的,因爲它的作品像魔術。 – Senthil 2014-10-28 16:41:58