2013-11-28 2 views
0

두 개의 다른 연결을 결합하는 추가 연결을 만들고 싶습니다.두 개의 'has_many_through'연결을 다른 연결에 연결하는 방법은 무엇입니까?

class Person < ActiveRecord::Base 
    has_many :cats 
    has_many :dogs 
    has_many :pets(dogs and cats) ??? 
end 

누구나 이것을 수행하는 좋은 방법을 알고 있습니까?

편집 :. 나는 관계없이 자신들이 무엇인지 열의 조인 테이블에서 기록을 당길 필요가

이 내가 두 번 DB를 핑 (ping) 할 필요가 없습니다 너무 순수 최적화 질문입니다 각 협회마다.

편집 : 데이터 예제의 가난한 세트를 선택한

.

class Person < ActiveRecord::Base 
    has_many :senders (is a person object) 
    has_many :receivers (is a person object) 
    has_many :contacts(friends and enemies) ??? 
end 

필드는 내가 레일 방식으로하고 싶은 말은 friend_id 및

을 enemy_id이 팩스이라는 조인 테이블이있다 : 당신은 클래스 상속을 활용한다

SELECT DISTINCT persons.* 
    FROM persons 
    WHERE persons.id IN 
    ( 
    SELECT faxes.sender_id 
     WHERE fakes.receiver_id = (?) 
)  
    OR persons.id IN 
    ( 
    SELECT faxes.receiver_id 
     WHERE fakes.sender_id = (?) 
) 
+0

유사

class Person < ActiveRecord::Base has_many :pets end class Pets < ActiveRecord::Base belongs_to :person end class Dog < Pet end class Cat < Pet end 

뭔가 당신이 DB를 두 번 핑 무엇을 의미합니까? 여러 SELECT 문과 같은 의미입니까? 그렇다면 단일 선택으로 고양이와 개 모두를 검색하는 유일한 방법은 STI를 사용하여 동일한 테이블에 저장하는 것입니다. –

답변

0

가. 이 SO Post

+0

어떤 열에 관계없이 조인 테이블에서 레코드를 가져와야합니다. 이것은 순수한 최적화 질문이므로 각 연결마다 db를 두 번 핑할 필요가 없습니다. –

관련 문제