25

저는 Rails에 익숙하지 않고 다형성 HABTM 관계를 만들려고합니다. 문제는 제가 관련시키고 자하는 3 가지 모델이 있다는 것입니다.HABTM 다형 관계

첫 번째는 이벤트 모델이며 두 가지 종류의 참석자 인 사용자 및 연락처입니다.

내가 원하는 것은 참석자로 사용자와 연락처를 연결하는 것입니다. 그럼, 난 내 코드에서 지금있는 것은 :

이벤트 모델

has_and_belongs_to_many :attendees, :polymorphic => true 

사용자 모델

has_and_belongs_to_many :events, :as => :attendees 

연락 모델

has_and_belongs_to_may :events, :as => :attendees 
  1. HABTM 테이블 마이그레이션은 어떻게해야합니까? 나는 조금 혼란스럽고 나는 그것에 대한 도움을 찾지 못했습니다.
  2. 작동 여부

답변

61

아니요, 그렇게 할 수 없습니다. 다형성 has_and_belongs_to_many 연관성은 없습니다.

중간 모델을 만들면됩니다. 서브 스크립 션 모델은 N에있는 링크를 테이블처럼 동작

class Subscription < ActiveRecord::Base 
    belongs_to :attendee, :polymorphic => true 
    belongs_to :event 
end 

class Event < ActiveRecord::Base 
    has_many :subscriptions 
end 

class User < ActiveRecord::Base 
    has_many :subscriptions, :as => :attendee 
    has_many :events, :through => :subscriptions 
end 

class Contact < ActiveRecord::Base 
    has_many :subscriptions, :as => :attendee 
    has_many :events, :through => :subscriptions 
end 

이 방법 : 아마 이런 식으로 뭔가 될 것 N 관계가 있지만 이벤트에 다형성 동작을 할 수 있습니다.

0

Resolveu parcialmente.

우리가 처한 프레임 워크에서 문제를 해결하지만 "불필요한"복잡성과 코드가 추가됩니다. 중간 모델 (B라고 부름)을 작성하고 A -> B -> C가 "has_many B 's has_many C 's"인 경우, AR 모델은 메모리에 한번 더 AR 클래스 구현을로드합니다. C 인스턴스에 도달하는 유일한 목적으로 인스턴스화됩니다. : through 연관을 사용하면 B 연관을로드하지 않겠지 만 캐러밴이 지나가는 것을 볼 수있는 훨씬 더 쓸모없는 모델이 남을 것입니다.

사실 이것은 활성 레코드에서 누락 된 기능 일 수 있습니다. 내가 추가 할 수있는 기능으로 제안 할 것이다. 왜냐하면 그것은 나 자신에 대한 우려의 원인 이었기 때문이다. (나는이 게시물에 해결책을 찾기를 희망했다.).

쿠 프리 멘토