2013-05-08 2 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 

나는 '모델'객체에서 모든 좋아하는 얻을 거기에서 등을 한 모든 사용자를 좀하고 싶습니다. 그래서 내 액티브 쿼리 코드 반환의 마지막 줄은 같은 사용자가 아니라 어떤 그러나

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

인 것입니다. 조인을 적절하게 사용하고 내가 원하는대로 할 수있는 방법이 있습니까?

감사합니다,

답변

3

당신은 할 수 has_many :through로 그 : 당신이 경우

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

고맙습니다. 정확히 내가 찾던 것이 아니라 작동합니다. 적어도 조인 할 때 반환 할 항목을 지정할 수 있어야합니다. – dostrander

1

: 루비에 참여

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

또는 수 열망로드 사용자와 할 보석 meta_where을 사용하면 범위 통합을 사용하여 데이터를 얻을 수 있습니다.

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

이는 예를 들어 반복 할 수 User을 기반으로 active_record 관계 객체를 반환합니다.

이것은 alfonso가 표시하는 대체 방법입니다. 그는 또한 일하게 될 것입니다.

관련 문제