模拟has_many:通过Mongoid

cbr*_*hli 5 activerecord ruby-on-rails data-modeling mongodb mongoid

我正在尝试使用MongoDB作为数据库创建一个事件平台.我希望Events和之间有多对多的关系Users.问题是,我希望在关系中有属性(例如,Users可以确认或未确认具体Event).我意识到这将非常适合RDBMS,但我使用MongoDB的原因是我在其他地方利用它,我宁愿继续使用它.

我希望每个人Event都能嵌入许多Guests属于的人Users.这样,我可以看到哪些用户快速参加了一个事件并且只有一个查询.不过,我也想看看这Events一个User迅速出席,所以我想每一个User有数组EventIDS.

这是一个代码摘要.

# 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)
Run Code Online (Sandbox Code Playgroud)

有了理想的使用模式,eGuest一个参考uu参考e.

我知道这has_many :through条线不起作用.有关如何获得类似功能的任何建议?我正在考虑使用after_create回调Guest来添加对Eventin 的引用User,但这似乎非常hacky.

也许我走错了路.建议?谢谢.

nod*_*rog 3

您可以将事件 ID 存储在用户的数组中。

当事件更改或用户由于某种原因从事件中删除时,您必须管理该数组。但这就是权衡。

然后可以通过单个数据库调用找到 User.events。

看看观察员来管理协会。