2012-11-25 3 views
0

내가 가지고있는 모델이라는 사용자가있는 경우 :레일 쿼리를 사용하여 연결 - has_many

has_many  :parent_relationships, 
       :class_name   => "Relationship", 
       :foreign_key   => :child_id, 
       :dependent    => :destroy, 
       :uniq => true 
    has_many  :parents, 
       :through    => :parent_relationships, 
       :source    => :parent 

그래서, 나는 적어도 하나의 부모를 가지고있는 사용자를 찾을 수 싶어합니다. 지금, 특정 사용자를 가져오고 user.parents을 수행하면 부모 목록이 표시되지만 where 절에서 어떻게 처리 할 수 ​​있습니까?

내 관심사는 지금 내가 이런 식으로 가져 오는하고 있다는 것입니다 :

User.where({:role => 'Teen'}) 

그래서, 내가 그 역할 하이틴이며, 적어도 부모가 모든 사용자를 찾고 싶어요. 또한, 그것은 더 복잡하게, 나는 고려하고자하는 다른 연결이 있습니다

has_and_belongs_to_many :notifications 

을 그리고 이름 속성이 "이메일"입니다 통지를 가지고 그 사용자를 찾을 싶습니다.

+0

당신이있는 거 질문이 아주 명확하지 않다 -를 통해, 당신은 * 부모와 * 사용자를 찾을 싶어 'User.find (...)'? 어떤 경우에, 어느 쪽? 또는 * User.where (...)를 통해 부모가 하나 이상있는 모든 사용자 *? – Thilo

+0

하나 이상의 부모가있는 모든 사용자. 죄송합니다. –

답변

0

A가 그것을해야 가입

감사 :

User.joins(:parents).uniq 

이이 INNER JOIN을 생성하기 때문에, 그것은 단지 부모와 함께 레코드를 반환합니다. uniq은 조인에서 리턴 할 수있는 중복 레코드를 제거합니다.

편집 :

귀하의 방법 체인이 같은 것을 일할 수 :

User.includes(:notifications).joins(:parents).where(:role => "Teen").where("notifications.name = 'email'") 
+0

Thilo, 나는 나의 질문이 내가 이미 가지고있는 다른 쿼리와 연결시키는 방법이라고 생각하기 때문에 나의 질문을 편집했다. –

+0

당신은 조인과 함께 그것을 할 수 있어야합니다, 단순히'where' 절을 추가하십시오. – Thilo

+0

편집을 끝내지 않았다고 생각합니다 ... –