微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何定义两个has_many:through模型之间的关系?

如何解决如何定义两个has_many:through模型之间的关系?

| 我有2个模型\“ users \”和\“ events \”,并且我使用了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。     

解决方法

        查看有关关联的rails指南。具体而言,第4.3节has_many协会参考 看起来您正在寻找的方法是@ customer.orders << @ order1。对于您的情况,使用@user和@event,您需要执行以下操作:
@user.events << @event
并将创建正确的关联。     ,        这是我的方法:
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
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。