0

Useraと aの 2 つのモデルがありEvent、それらの間に 2 つの異なる関連付けを設定します。

欲しいもの:
- ユーザーが多数の主催イベントを持つ
ユーザー - 多数の参加イベントを持つユーザー
- 1 人のユーザー (所有者/作成者)
に属するイベント - 多くのユーザー (出席者) に属するイベント

それは、参加したイベントの多くの関係に属しており、ホストされたイベントの多くを持っているだけです。適切に設定する方法/レールの方法がわかりません。

users_attended_events テーブルが必要なのはわかっています

モデル的にはこんな感じUser

has_many :events, through: :hosted_events
has_many :events, through: :attended_events

Eventしかし、のモデルについてはどうすればよいでしょうか。

私は持っている:

belongs_to: user
alias_attribute :owner, :user
alias_attribute :creator, :user

has_many :users, through:??? 

これは users_attended_events テーブルでなければならないので、ここに何を入れますか? これを「出席者」と呼ぶにはどうすればよいですか

4

1 に答える 1

1

イベントをホストしているユーザーの関連付けを介して has_many が必要なようには思えません。テーブルに列がある場合、このようなものは( user.rbで)十分に機能するはずです:hosted_by_idevents

has_many :hosted_events, class_name: "Event", foreign_key: "hosted_by_id"

attendee_id列と列を持つ結合クラスを想定したイベントに参加する場合event_id:

class AttendeeEvent < ActiveRecord::Base

  belongs_to :attendee, class_name: "User"
  belongs_to :event

end

次の関連付けをuser.rbに追加できます。

has_many :attendee_events, foreign_key: "attendee_id"
has_many :attended_events, through: :attendee_events, source: :event

このsource: :eventオプションは、このアソシエーションのターゲット オブジェクトがevent結合オブジェクトのアソシエーションから検出されることを示します。

event.rbの関連付けは次のとおりです。

belongs_to :hosted_by, class_name: "User"
has_many :attendee_events
has_many :attendees, through: :attendee_events
于 2013-08-31T19:50:02.520 に答える