Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 对于最终属于某事物的无父对象,什么是正确的mongoid关系?_Ruby On Rails_Mongodb_Mongoid - Fatal编程技术网

Ruby on rails 对于最终属于某事物的无父对象,什么是正确的mongoid关系?

Ruby on rails 对于最终属于某事物的无父对象,什么是正确的mongoid关系?,ruby-on-rails,mongodb,mongoid,Ruby On Rails,Mongodb,Mongoid,我有两个目标: 香蕉 篮子 香蕉没有篮子也能生存 但篮子里必须装一根香蕉 我做到了: 香蕉班 嵌入 班级篮 嵌入香蕉 但是 当我尝试制作香蕉时,mongoid抱怨没有篮子 解决办法是什么 香蕉没有篮子也能生存 这使它成为一级公民,因此嵌入并不是一个真正的选项,人们可以为不在篮子里的香蕉创建“影子篮子”,但这个想法在凌晨1点的时候太令人毛骨悚然了。不推荐 听起来一个篮子里可能有不止一个香蕉,但即使没有,改变聚合似乎也没有意义,即将篮子“放”在香蕉里。它不能模拟现实,所以它可能是一个糟糕的设计 篮子

我有两个目标:

香蕉 篮子 香蕉没有篮子也能生存

但篮子里必须装一根香蕉

我做到了:

香蕉班 嵌入

班级篮 嵌入香蕉

但是

当我尝试制作香蕉时,mongoid抱怨没有篮子

解决办法是什么

香蕉没有篮子也能生存

这使它成为一级公民,因此嵌入并不是一个真正的选项,人们可以为不在篮子里的香蕉创建“影子篮子”,但这个想法在凌晨1点的时候太令人毛骨悚然了。不推荐

听起来一个篮子里可能有不止一个香蕉,但即使没有,改变聚合似乎也没有意义,即将篮子“放”在香蕉里。它不能模拟现实,所以它可能是一个糟糕的设计

篮子里必须装一根香蕉

您必须在客户代码中确保这一点,并将香蕉和篮子作为一级公民:

basket { _id : 7871, ... }
banana { _id : 4545, basket_id : 7871, ... }

第二种变体更容易执行一个篮子必须有一个香蕉的规则,而第一种变体更容易确保一个香蕉不同时在两个篮子中

确保满足这些标准并不是一件小事,因为mongodb不支持事务,并且您不能自动修改多个文档。您的客户端代码必须处理此问题,例如通过锁定

basket { _id : 7871, banana_ids : [ 4545, ... ] }
banana { _id : 4545, ... }