我有两个模型“用户”和“事件”,我使用has_many:through定义来定义用户和事件之间的多对多关系。每个用户可以属于0个或多个事件,每个事件可以有0个或多个与之关联的用户。
我知道当我有一个has_many和belongs_to关系时,我可以简单地执行user.events.create(arg),并且rails知道该事件与该给定用户相关联。但是,当它是多对多时,我该如何关联它们?我怎么说用户X现在属于事件A而用户Y属于事件A而用户X也属于事件B.那么,另外,如果我想要如何销毁这种关系?
由于事件和用户都不属于单个用户/事件......如何在创建用户实例和事件实例后定义关系?
所以......我猜我在问这是否有效:
@user = User.create(args)
@event = Event.create(args)
@user.events << @event
这会自动将用户与我刚刚添加到用户的事件相关联吗?它似乎有效,但是当我尝试这个时:
@user2 = User.create(args)
@user2.events << @event
这似乎并未将@ user2与该特定事件相关联,但它将该事件与@ user2相关联。我做了:
@event.users
并且只列出了@user ...而不是@ user2。
答案 0 :(得分:0)
查看有关关联的rails指南。具体为4.3 has_many Association Reference
部分看起来你正在寻找的方法是@ customer.orders&lt;&lt; @ order1。在您的情况下,使用@user和@event,您将要执行以下操作:
@user.events << @event
将创建正确的关联。
答案 1 :(得分:0)
我就是这样做的:
class User
has_many :events, :through => :user_event_associations
has_many :user_event_associations
class Event
has_many :users, :through => :user_event_associations
has_many :user_event_associations
class UserEventAssociation
belongs_to :user
belongs_to :event
如果你这样做,你可以做
some_user_object.events << some_event_object
然后如果你重新加载some_event_object
,你也会看到那里的关系。请注意,user_event_associations是连接表,并且作为真实的表和模型存在,只有上面的那两行。我从来没有使用过那张桌子 - 这是支持多对多关联的一种不足之处。
至于破坏行为,您可以查看dependent => destroy