2013-05-08 27 views
0

我只是想盡可能使用ActiveRecord,並且在按照自己喜歡的方式進行連接時遇到問題。ActiveRecord加入

這裏是我的模型是如何設置:

class Model 
    has_many :likes 
end 

class Like 
    belongs_to :model 
    belongs_to :user 
end 

class User 
    has_many :likes 
end 

我想從一個「樣板」對象得到所有的喜歡,並從那裏獲取所有這樣作的用戶。因此,這是我的ActiveRecord的查詢是

@model = Model.find(params[:id]) 
@users = @model.likes.joins(:user) 

然而,什麼樣的代碼返回的最後一行是喜歡,而不是用戶。有什麼方法可以恰當地使用連接並按照我的要求進行操作?

感謝,
DO

回答

3

你可以做到這一點與has_many :through

class Model 
    has_many :likes 
    has_many :users, :through => :likes 
end 

或者,你可以貪婪加載的用戶和做Ruby中加入:

@users = @model.likes.includes(:user).map(&:user) 
+0

謝謝,不是我正在尋找的東西,但它的工作原理。它看起來像你應該至少能夠指定哪些返回連接。 – dostrander 2013-05-08 15:52:38

1

如果您使用gem meta_where,你可以使用範圍合併來獲取你的數據。

@users = User.scoped & (Like.scoped & Model.where(:id => params[:id])) 

這將返回基於User的active_record關係對象,你可以例如迭代。

這是alfonso顯示的替代方法。他也會工作。