Ruby on rails 使用Mongoid进行模拟有很多步骤

Ruby on rails 使用Mongoid进行模拟有很多步骤,ruby-on-rails,activerecord,mongodb,mongoid,data-modeling,Ruby On Rails,Activerecord,Mongodb,Mongoid,Data Modeling,我正在尝试使用MongoDB作为db创建一个事件平台。我想要事件和用户之间的多对多关系。问题是,我希望关系中有属性(例如,用户可以针对特定的事件进行确认或未确认)。我意识到这非常适合RDBMS,但我使用MongoDB的原因是我在其他地方利用了它,我更愿意继续使用它 我想让每个事件嵌入许多属于用户的来宾。这样,我可以通过一个查询快速查看哪些用户正在参加活动。但是,我还希望看到用户正在快速参与哪些事件,因此我希望每个用户都有一个事件ID数组 下面是代码摘要 #应用程序的用户 类用户 你参加过很多活动

我正在尝试使用MongoDB作为db创建一个事件平台。我想要
事件
用户
之间的多对多关系。问题是,我希望关系中有属性(例如,
用户
可以针对特定的
事件
进行确认或未确认)。我意识到这非常适合RDBMS,但我使用MongoDB的原因是我在其他地方利用了它,我更愿意继续使用它

我想让每个
事件
嵌入许多属于
用户的
来宾
。这样,我可以通过一个查询快速查看哪些用户正在参加活动。但是,我还希望看到
用户
正在快速参与哪些
事件
,因此我希望每个
用户
都有一个
事件
ID数组

下面是代码摘要

#应用程序的用户
类用户
你参加过很多活动吗
结束
#用户可以选择参加的活动
班级活动
有很多客人
有很多:用户,:通过=>:来宾#无法工作
结束
#活动嘉宾
班客
字段:已确认?,类型:布尔值
嵌入在:事件中
属于:用户
结束
#理想使用模式
u=用户创建
e=事件。创建
e、 create(:user=>u,:confirm=>true)
在理想的使用模式下,
e
有一个
Guest
引用
u
u
有一个
e
引用

我知道
有很多:through
行行不通。关于如何获得类似的功能,有什么建议吗?我想在
Guest
中使用
after\u create
回调来添加对
User
中的
事件的引用,但这似乎很老套


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

您只需将事件ID存储在用户的阵列中即可

当事件发生更改或用户因某种原因从事件中删除时,您必须管理阵列。但这就是交易

然后可以通过单个db调用找到User.events


查看以管理关联。

我最终在模型中使用回调来实现我想要的。这是它的样子

编辑:我刚看到诺德罗的答案。是的,使用观察员可能会更整洁,我不知道他们。谢谢

#应用程序的用户
类用户
has_和_属于_许多:事件,与_相反的:nil,dependent::nullify
结束
#用户可以选择参加的活动
班级活动
有很多客人
索引'guests.user_id',unique:true
销毁前:清理客户参考
def cleanup_guest_参考资料
自己的客人。每个人都是客人|
毁灭
结束
结束
结束
#活动嘉宾
班客
字段:已确认?,类型:布尔值
嵌入在:事件中的\u,:反转的\u=>:来宾
属于:用户
创建后:为用户添加事件
销毁前:删除用户的事件
私有的
def为用户添加事件
self.user.events.push(self.event)
结束
def删除用户的事件
self.user.events.delete self.event
self.user.save
结束
结束

我刚看到你的答案。我公布了我最终如何解决问题,但使用观察者会更干净。谢谢嘿,nodrog,链接断了。有人能说这样做最好的方法是什么吗?我认为回调是有意义的。与观察家非常相似。