加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Mongoid store_in产生随机结果

发布时间:2020-12-17 03:46:24 所属栏目:百科 来源:网络整理
导读:我使用Rails 3.2.2与mongoid 2.4.6.为了保持我的集合小,我使用“store_in”语句将子对象存储在sepparate集合中的基类中.我的代码看起来像这样: class BaseClass include Mongoid::Documentendclass ChildClass1 BaseClass store_in :child_1end class Child
我使用Rails 3.2.2与mongoid 2.4.6.为了保持我的集合小,我使用“store_in”语句将子对象存储在sepparate集合中的基类中.我的代码看起来像这样:

class BaseClass
  include Mongoid::Document
end

class ChildClass1 < BaseClass
  store_in :child_1
end  

class ChildClass2 < BaseClass
  store_in :child_2
end

似乎对象随机存储在或其他子集合中. Child1类型的对象有时会存储在集合Child2中.
这是我在日志中看到的令人惊讶的事情:

Started POST "/child_class_1" for 127.0.0.1 at 2012-05-22 10:22:51 -0400
Processing by ChildClass1Controller#create as HTML

MONGODB (0ms) myproject_development['child_2'].insert....

它来自哪里?这是mongoid,rails还是mongodb中的错误?

解决方法

我花了一段时间,但我想出了答案.我决定发布它,希望它能帮助别人.

Mongoid实现了一种叫做“单表继承”的东西.一旦从父类派生子类,子项将存储在父集合中,添加“type”属性.使用“store_in”可以明确地告诉mongodb将文档存储在哪个集合中.在子类中定义store_in会使mongoid存储给定集合中的所有内容(包括父级).我想使用专门的store_in任务为每个孩子混淆mongoid up.但是,结果是文档随机存储在任何给定的集合中.

这可以在Ruby中使用模块作为mixin来解决,以实现通用功能.这在this document中很好地描述.

但毕竟我决定不这样做!我想要这个的原因是为了保持我的收藏量小,希望获得更好的性能.在与一些(10gen)专家交谈后,我认为更好的方法是对所有子元素使用单父对象集合.应该对mongodb的性能没有影响,但解决方案变得更加灵活.事实上,这可以更好地利用mongodb中的无模式设计.

所以代码将再次看起来像这样:

class BaseClass
  include Mongoid::Document

  ... shared functionality

end

class ChildClass1 < BaseClass
  ...individual functionality...
end  

class ChildClass2 < BaseClass
  ...individual functionality...
end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读