ruby-on-rails – 模拟has_many:通过Mongoid
发布时间:2020-12-17 03:20:43 所属栏目:百科 来源:网络整理
导读:我正在尝试使用MongoDB作为数据库创建一个事件平台.我想要事件和用户之间的多对多关系.问题是,我希望关系中有属性(例如,用户可以确认或未确认特定事件).我意识到这将非常适合RDBMS,但我使用MongoDB的原因是我在其他地方利用它,我宁愿继续使用它. 我希望每个
我正在尝试使用MongoDB作为数据库创建一个事件平台.我想要事件和用户之间的多对多关系.问题是,我希望关系中有属性(例如,用户可以确认或未确认特定事件).我意识到这将非常适合RDBMS,但我使用MongoDB的原因是我在其他地方利用它,我宁愿继续使用它.
我希望每个事件都嵌入许多属于用户的Guest.这样,我可以看到哪些用户快速参加了一个事件并且只有一个查询.但是,我还想看看用户正在快速参加哪些活动,所以我希望每个用户都有一个事件ID数组. 这是一个代码摘要. # user of the application class User has_many :events end # event that users can choose to attend class Event embeds_many :guests has_many :users,:through => :guests # Won't work end # guests for an event class Guest field :confirmed?,type: Boolean embedded_in :event belongs_to :user end # Ideal use pattern u = User.create e = Event.create e.guests.create(:user => u,:confirmed => true) 使用理想的使用模式,e有一个访客参考你,你有一个参考e. 我知道has_many:直通行不通.有关如何获得类似功能的任何建议?我在考虑在Guest中使用after_create回调来添加对用户事件的引用,但这看起来很糟糕. 也许我走错了路.建议?谢谢. 解决方法
您只需将事件ID存储在用户的数组中即可.
当事件发生变化或者由于某种原因从事件中删除用户时,您必须管理阵列.但这就是权衡. 然后可以使用单个db调用找到User.events. 查看observers以管理关联. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |