2012-04-03 58 views
1

我試圖讓我的ActiveRecord查詢更有效率。我有用戶和項目,用戶對項目有一種感覺,並帶有布爾響應。如何將所有數據保存在has_many中:通過ActiveRecord關係?

這裏是我的模型:

用戶:

has_many :feelings 
has_many :items, :through => :feelings 

感覺:

belongs_to :user 
belongs_to :item 
attr_accessible :response 

項目:

attr_accessible :name 

所以,我可以得到一個用戶的感覺名單通過:

User.find(1).feelings 

,我可以得到他有關感情的項目清單:

User.find(1).items 

這是所有罰款。我想要的是,上述兩個查詢在一個結果集中的組合。理想情況下,我希望能夠查詢用戶項目的列表,並用這些結果獲取他們對每個項目的響應。

如果這是直接的SQL,我可以這樣做:

SELECT * FROM items INNER JOIN feelings ON items.id=feelings.item_id WHERE feelings.user_id = 1 

這就給了我一切,我需要在一個表中。這也是ActiveRecord在查詢User.find(1).items時所做的,除了它在創建我的結果散列值之前拋棄感情表中的數據。

我該如何阻止它拋出intermediatry數據,從而爲我節省額外的數據庫查詢?

任何幫助表示讚賞!

回答

2

你可以用它寫這樣的Rails 3中,

User.find(1).feelings.includes(:item) 

,並在軌道2,

User.find(1).feelings.find(:all, :include => :item) 

這通常會導致兩個查詢。一個選擇感受,另一個選擇項目。

相關問題