[Rails] 다형성 중간 테이블에 through 관련 정의
4851 단어 polymorphicRailsActiveRecord
설명/해제
Rails의 ActiveRecord에 있어서, 폴리모픽 관련이 정의되고 있는 중간 테이블이 있는 경우의 through의 정의 방법.
폴리모픽 관련 및 through 관련 상세 설명.
일반 through 연관
다음과 같은 관계가 각 모델에 있다고 가정합니다.
company는 복수의 event를 주최할 수 있고, 복수의 company가 공동으로 event를 주최할 수 있습니다. 이 경우 다음과 같은 연관을 정의합니다.
model.rbclass Company < ApplicationRecord
has_many :event_owners
has_many :events, through: :event_owners
end
class EventOwners < ApplicationRecord
belongs_to :company
belongs_to :event
end
class Event < ApplicationRecord
has_many :event_owners
has_many :companies, through: :event_owners
end
그런 다음 EventOwner를 통해 evet에 연결하는 여러 company를 다음과 같이 얻을 수 있습니다.
> event.companies
=> # [company1, company2]
자, 여기까지는 아는 대로입니다.
다형성 관련 through 관련
그럼 여기서 comapny 외에 일반 user도 이벤트를 개최할 수 있게 된 경우를 생각해 보겠습니다. 관련 다이어그램은 다음과 같습니다.
자, 이제 다형성 관련을 정의해 봅시다.
model.rbclass Company < ApplicationRecord
has_many :event_owners, as: :eventable
has_many :events, through: :event_owners
end
class User < ApplicationRecord
has_many :event_owners, as: :eventable
has_many :events, through: :event_owners
end
class EventOwners < ApplicationRecord
belongs_to :event
belongs_to :eventable, polymorphic: true # ポリモーフィック関連
end
class Event < ApplicationRecord
has_many :event_owners
# 以下がポリモーフィックなthrough関連
has_many :companies, through: :event_owners, source: :eventable, source_type: 'Company'
has_many :users, through: :event_owners, source: :eventable, source_type: 'User'
end
through 관련으로 source 를 정의하는 것으로, 이하와 같이 event 에 관련하는 user or company 를 취득할 수가 있습니다.
> event.companies # or event.users
=> # [company1, company2]
조금 전까지 몰랐지만 굉장히 편리!
Reference
이 문제에 관하여([Rails] 다형성 중간 테이블에 through 관련 정의), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Paul_Dirac/items/75f6af617c3c16fbff1e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
class Company < ApplicationRecord
has_many :event_owners
has_many :events, through: :event_owners
end
class EventOwners < ApplicationRecord
belongs_to :company
belongs_to :event
end
class Event < ApplicationRecord
has_many :event_owners
has_many :companies, through: :event_owners
end
> event.companies
=> # [company1, company2]
그럼 여기서 comapny 외에 일반 user도 이벤트를 개최할 수 있게 된 경우를 생각해 보겠습니다. 관련 다이어그램은 다음과 같습니다.
자, 이제 다형성 관련을 정의해 봅시다.
model.rb
class Company < ApplicationRecord
has_many :event_owners, as: :eventable
has_many :events, through: :event_owners
end
class User < ApplicationRecord
has_many :event_owners, as: :eventable
has_many :events, through: :event_owners
end
class EventOwners < ApplicationRecord
belongs_to :event
belongs_to :eventable, polymorphic: true # ポリモーフィック関連
end
class Event < ApplicationRecord
has_many :event_owners
# 以下がポリモーフィックなthrough関連
has_many :companies, through: :event_owners, source: :eventable, source_type: 'Company'
has_many :users, through: :event_owners, source: :eventable, source_type: 'User'
end
through 관련으로 source 를 정의하는 것으로, 이하와 같이 event 에 관련하는 user or company 를 취득할 수가 있습니다.
> event.companies # or event.users
=> # [company1, company2]
조금 전까지 몰랐지만 굉장히 편리!
Reference
이 문제에 관하여([Rails] 다형성 중간 테이블에 through 관련 정의), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Paul_Dirac/items/75f6af617c3c16fbff1e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)