0

だから私は、クラス User がクラス Event を作成して参加できる単純なイベント Web アプリケーションを作成しようとしています。クラス ユーザーがクラス イベントを作成する場合、そのイベントをユーザーに所属させたいと考えています。しかし、同じユーザーが別のイベントに参加するためにサインアップした場合、ユーザーはそのイベントに所属し、そのイベントは多くのユーザーに所属する必要があります。ただし、これが実際にモデルにどのように書き込まれるかはわかりません。

1 つのケースでは、クラス User はイベントに属する参加者であり、別のケースでは、彼らはホストであり、イベントは彼らに属しています。私はこれをドライに保ちたくないし、もし私が持っていないのであれば、別々のユーザークラス (この場合はホストと参加者) を作成したくありません。単なるジョイント テーブルでは、この条件付き関連付けを説明できないようです。これを行うための最良の方法に関するアドバイスはありますか?

クラスユーザー???

クラスイベント????

ありがとう!

4

4 に答える 4

2

2 つの関連付けを作成する必要があります。1 つは作成されたイベントにリンクし、もう 1 つはサブスクライブしたイベントにリンクします。

create_table :event_subscriptions do |t|
  t.references :subscribed_user
  t.references :subscribed_event
end

create_table :events do |t|
  t.references :user
  # other fields
end

class User < ActiveRecord::Base
  has_many :events               # created Events
  has_many :event_subscriptions, :foreign_key => :subscribed_user_id
  has_many :subscribed_events, :through => :event_subscriptions  # subscribed Events
end

class EventSubscription < ActiveRecord::Base
  belongs_to :subscribed_user, :class_name => 'User'
  belongs_to :subscribed_event, :class_name => 'Event'
end

class Event < ActiveRecord::Base
  belongs_to :user               # the creating User
  has_many :event_subscriptions, :foreign_key => :subscribed_event_id
  has_many :subscribed_users, :through => :event_subscriptions   # subscribed Users
end
于 2013-04-17T21:16:24.457 に答える