怪异怪异

时间:2011-08-31 16:36:43

标签: ruby-on-rails ruby-on-rails-3 mongodb mongoid

我确信这只是一些非常基本的MongoDB概念我无法理解,但这让我感到疯狂。

我的Rails 3.1应用程序中有2个非常简单的Mongoid模型

class Box
  include Mongoid::Document
  field :name, :type => String
  embeds_many :things
end

class Thing
  include Mongoid::Document
  field :name, :type => String
  embedded_in :box
end

我创建了2个盒子

Box.create :name => "Big"
=> #<Box _id: 4e5e5c051c3a2b2efc00009d, _type: nil, name: "Big">

Box.create :name => "Small"
=> #<Box _id: 4e5e5c251c3a2b2efc00009e, _type: nil, name: "Small">

我注意到的第一个奇怪的事情就是这个

Box.all.count
=> 2

Box.all.collect &:name
=> ["Big", "Small"]

Box.all.first
=> #<Box _id: 4e5e5c051c3a2b2efc00009d, _type: nil, name: "Big">

Box.all.last
=> #<Box _id: 4e5e5c051c3a2b2efc00009d, _type: nil, name: "Big">

firstlast是一样的吗?什么......?

当我向盒子添加东西时,下一个奇怪的事情发生了

my_box = Box.find "4e5e5c051c3a2b2efc00009d"
=> #<Box _id: 4e5e5c051c3a2b2efc00009d, _type: nil, name: "Big">

my_box.things.create :name => "Stuff"
=> #<Thing _id: 4e5e5ee11c3a2b2efc00009f, _type: nil, name: "Stuff">

my_box.things.all.count
=> 1

# ... add a bunch of other things

my_box.things.all.count
=> 5

my_box.things.create :name => "Stuff"
=> #<Thing _id: 4e5e5eeb1c3a2b2efc0000a4, _type: nil, name: "Stuff">

my_box.things.all.count
=> 2

哇!我的数据库丢失了很多东西吗?

这里发生了什么?这是预期的行为吗?

2 个答案:

答案 0 :(得分:0)

您可以尝试按照

class Box
  include Mongoid::Document
  field :name, :type => String
  references_many :things
end

class Thing
  include Mongoid::Document
  field :name, :type => String
  referenced_in :box
end

答案 1 :(得分:0)

感谢大家的建议。

使用Mongoid和Rails 3.1显然是一个丑陋的副作用。就像Rails 3.0的魅力一样。

对于记录:不要尝试使用带有Rails 3.1的Mongoid 2.2.0。