你需要做2個協會 - 一個鏈接到創建活動,和一個鏈接到訂閱事件:
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
如果你瞭解foreign_keys,你就會明白爲什麼一個連接表是必要的,這案件。當你說用戶belongs_to一個事件,你說的事件的ID是在用戶的event_id屬性,作爲一個foreign_key ...這意味着用戶一次只能屬於一個事件,沒關係,如果這是你的目的。 「幹」並不意味着沒有連接表...連接很有趣! – omarvelous