【发布时间】:2011-09-13 00:38:01
【问题描述】:
我正在尝试创建一个使用 MongoDB 作为数据库的事件平台。我想要Events 和Users 之间的多对多关系。问题是,我希望关系中有属性(例如,Users 对于特定的Event 可以确认或未确认)。我意识到这将非常适合 RDBMS,但我使用 MongoDB 的原因是我正在其他地方利用它,我更愿意继续使用它。
我希望每个Event 嵌入许多属于Users 的Guests。这样,我可以通过一个查询快速查看哪些用户正在参加活动。但是,我还想看看哪个Events 和User 正在快速参加,所以我希望每个User 都有一个Event 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 有一个 Guest 引用 u,u 有一个引用 e。
我知道has_many :through 行不起作用。关于如何获得类似功能的任何建议?我正在考虑在Guest 中使用after_create 回调来在User 中添加对Event 的引用,但这似乎很hacky。
也许我走错了路。建议?谢谢。
【问题讨论】:
标签: ruby-on-rails activerecord mongodb mongoid data-modeling