加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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以管理关联.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读