ユーザーとイベントの2つのモデルがあります。ユーザーとイベントの間には2種類の関係が必要です。
- ユーザー(:主催者として)<------->イベント、多対多の関係
- ユーザー(:出席者として)<------->イベント、多対多の関係
ポリモーフィズムとの2つの異なるhas_many_and_belongs_to関連付けを使用して、関係を実装できるかどうかを推測しています。私はレールに慣れていないので、問題について助けていただければ幸いです。
ユーザーとイベントの2つのモデルがあります。ユーザーとイベントの間には2種類の関係が必要です。
ポリモーフィズムとの2つの異なるhas_many_and_belongs_to関連付けを使用して、関係を実装できるかどうかを推測しています。私はレールに慣れていないので、問題について助けていただければ幸いです。
これにはポリモーフィックな関係は必要ありません。
2 つのモデル間の 2 つの関連付けを定義するには、次のようにします。
class User
has_many :organized_events, foreign_key: :organizer_id, class_name: "Event"
has_many :attended_events, foreign_key: :attendee_id, class_name: "Event"
end
class Event
belongs_to :organizer, class_name: "User"
belongs_to :attendee, class_name: "User"
end
これにより、1対多の関係が得られます。
多対多が必要な場合は、関連付けごとに結合テーブルが必要になります。
class User
has_many :attendances, foreign_key: :attendee_id
has_many :attended_events, through: :attendances
end
class Event
has_many :attendances, foreign_key: :attended_event_id
has_many :attendees, through: :attendances
end
class Attendance
belongs_to :attended_event, class_name: "Event"
belongs_to :attendee, class_name: "User"
end
そして、イベント主催者協会についても同様です。
ここで私の質問を参照してください
私のコメントで述べたように、リレーションシップ オーガナイザーと出席者が同じユーザーに対して同時に存在できる場合にのみ、ポリモーフィックな関連付けが必要です。この場合は多態的な関連付けを使用し、そうでない場合はhas_many :through
関連付けまたは関連付けを使用できますhas_and_belongs_to_many
。たとえば、検証を保持できる追加のモデルがあるため、最初のものはより柔軟です。