2011-10-14 18 views
1

我有以下型號:如何強制ActiveRecord通過JOIN加載belongs_to-has_one關係而不是2個查詢?

User < ActiveRecord::Base 
    belongs_to :person 
end 

Person < ActiveRecord::Base 
    has_one :user 
end 

如果我想用戶裝載時,它被加載,我會做這樣的人:

User.includes(:person) 

的問題是,在使用2查詢,這很好,在belongs_to-has_many關係中,但在這種情況下,我認爲使用JOIN和只有一個查詢會更好。

如果我做User.join(:person)它將加入:person,但不包括選擇的陳述和屬性:user

我該怎麼做?

回答

0

我發現使用:

User.includes(:person) 

執行2個查詢...但是,如果你需要使用的列:在查詢人,ActiveRecord的自動的檢測,並在2個查詢的轉換單查詢聯接

User.includes(:person).where('person.name=?', 'something') 

我從未停止於由導軌驚訝^^

+0

你也可以使用#eager_load,這迫使聯想到一個單一的連接查詢被加載。 –

相關問題