我正在尝试使用MongoDB作为数据库创建事件平台。我希望在“事件”和“用户”之间建立多对多的关系。但是,我想在关系中添加属性(例如,“用户”可以针对特定的“事件”确认或未确认)。我意识到这可能更适合关系型数据库,但是由于我在其他方面正在利用MongoDB,因此我宁愿继续使用它。
我希望每个“事件”都嵌入许多属于“用户”的“来宾”。这样,我就可以通过一次查询快速查看哪些用户参加了某个事件。但是,我还想快速查看哪些“事件”一个“用户”参加,因此我希望每个“用户”都有一个“事件”id数组。
以下是代码概述。
我希望每个“事件”都嵌入许多属于“用户”的“来宾”。这样,我就可以通过一次查询快速查看哪些用户参加了某个事件。但是,我还想快速查看哪些“事件”一个“用户”参加,因此我希望每个“用户”都有一个“事件”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
具有对u
的引用和u
具有对e
的引用。
我知道has_many: through
这一行不起作用。如何获得类似的功能?我考虑在Guest
中使用after_create
回调来添加对User
中的Event
的引用,但这似乎很hacky。
也许我走了错误的路。有什么建议吗?谢谢。