2011-08-02 2 views
1

작성한 모델 CardSignup에서 상품권을 취득 할 수있는 User 모델이 있습니다.두 개의 연관된 모델이 동일한 조인 이름을 공유 할 수 있습니까?

User.rb

has_many :conversions, :foreign_key => :converted_by, :class_name => "CardSignup" 
has_many :conversions, :foreign_key => :converted_by, :class_name => "GiftConversion" 

:

그러나 나는 또한 나의 모델 있도록 설정되어 GiftConversion

라는 별도의 모델에서 무료로 상품권을주고 싶습니다 CardSignup.rb

belongs_to      :converted_by, :class_name => "User" 

이 방법으로

belongs_to      :converted_by, :class_name => "User" 

GiftConversion, 내가 뭘 원하는 User.find(x).conversions을 입력이며, 해당 사용자에게 관련되어 자신의 foreign_key :converted_by로 너무 오래 CardSignup 모델과 GiftConversion 모델을 모두 반환 모델.

아쉽게도 제대로 작동하지 않습니다. 대신 컴파일러는 이후의 명령문을 가져옵니다. 이 경우 GiftConversion을 입력하면 User.find(x).conversions으로 인식됩니다.

User 모델은 두 모델을 같은 이름으로 공유 할 수 있습니다.

답변

0

UNION 또는 그와 비슷한 것을 사용하여 두 테이블을 사용자 지정 SQL 문과 연결하는 사용자 지정 연결이있을 수 있지만 유사하지만 완전히 다른 두 가지 모델을 가지고 있으므로 권장하지 않습니다. 단일 테이블 상속을위한 훌륭한 유스 케이스.

나는 그것을 할 것입니다 방법은 모두 CardSignupGiftConversion에 대한 하나 개의 테이블이 두 모델을 연결하는 단일 테이블 상속을 사용하는 것입니다, 그래서 일반적인 테이블은 그것의 여부를 지정하는 type 열을 포함 것 CardSignup 또는 GiftConversion .

자세한 내용은 "단일 테이블 상속"에서 여기를 참조하십시오 :

http://api.rubyonrails.org/classes/ActiveRecord/Base.html

+0

난 정말이의 머리 또는 꼬리를 만들 수 없습니다. 그러나 그것은 좋은 생각처럼 보입니다. – Trip

+0

이 기사에서는이 점을 잘 설명합니다. http://code.alexreisner.com/articles/single-table-inheritance-in-rails.html –

+0

이 2 가지에서 1/1까지의 세 가지 모델을 병합하는 방법은 여전히 ​​설명하지 않습니다. 2 개의 다형성 연관성을 나타낸다. – Trip

관련 문제