0

ユーザーとイベントの2つのモデルがあります。ユーザーとイベントの間には2種類の関係が必要です。

  • ユーザー(:主催者として)<------->イベント、多対多の関係
  • ユーザー(:出席者として)<------->イベント、多対多の関係

ポリモーフィズムとの2つの異なるhas_many_and_belongs_to関連付けを使用して、関係を実装できるかどうかを推測しています。私はレールに慣れていないので、問題について助けていただければ幸いです。

4

2 に答える 2

2

これにはポリモーフィックな関係は必要ありません。

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

そして、イベント主催者協会についても同様です。

ここで私の質問を参照してください

于 2012-06-09T10:43:34.053 に答える
0

私のコメントで述べたように、リレーションシップ オーガナイザーと出席者が同じユーザーに対して同時に存在できる場合にのみ、ポリモーフィックな関連付けが必要です。この場合は多態的な関連付けを使用し、そうでない場合はhas_many :through関連付けまたは関連付けを使用できますhas_and_belongs_to_many。たとえば、検証を保持できる追加のモデルがあるため、最初のものはより柔軟です。

于 2012-06-09T09:55:42.557 に答える