2012-07-09 3 views
1

저는 현재 상당히 단순한 모델 구조를 설정하려고합니다. 그러나 꽤 떨어지지는 않았습니다.레일즈 - 다형성 연관 테이블 조인

나는 customer 또는 supplier (둘 다 많을 수 있습니다. payments) 중 하나에 속하는 모델 payment을 가지고 있습니다.

제 질문은 단순히 이것을 허용하기 위해 수동으로 인터페이스 테이블을 만들 필요가 있는지 또는 다형성 연관을 선언하면 나를 대신 할 수 있을까요?

나는 가지고있다 :

class Payment < ActiveRecord::Base 
    belongs_to :payment_originator, :polymorphic => true 
end 

class Customer < ActiveRecord::Base 
    has_many :payments, :as => :payment_originator 
end 

class Supplier < ActiveRecord::Base 
    has_many :payments, :as => :payment_originator 
end 

충분하거나, 발전기를 사용하여 수동으로 payment_originator 모델을 만들어야합니까?

감사합니다.

+0

클래스 이름은 대문자이어야합니다. 'PaymentOriginator' 모델이 실제로 존재하지 않는다면'Customer.payments << Payment.new (...)'또는'Supplier.payments << Payment.new (...)'를 아무런 문제없이 할 수 있어야합니다. – deefour

+0

감사합니다. 나는 그들을 편집했습니다. 직접 앱에서 복사하는 대신 예제로 입력하고 싶었습니다. –

답변

2

모델에 관한 한 충분히 좋습니다. :payment_originator_type:payment_originator_id을 결제 테이블로 이전하면됩니다. 위에 정의한 연결은 자동으로이를 채 웁니다.

+0

감사합니다. 지불 테이블에서 직접 SQL 쿼리를 수행하면 고객의 지불을 위해 : payment_originator_type 열에서 "customer"와 같은 것을 볼 수 있습니다. 이 칼럼이 무엇인지 명확히 밝히고 나중에 어떻게 작동하는지 기억합니다. –

+0

예, _type 열은 클래스 이름을 나타내는 문자열을 저장합니다. 참조 : http://guides.rubyonrails.org/association_basics.html#polymorphic-associations. – cdesrosiers