Mongoid和Rails的“链式”关系(1:n:m)

时间:2013-03-21 16:18:51

标签: ruby-on-rails ruby mongoid belongs-to database-relations

我试图实现一个非常简单的多重关系"在Rails(3.2.12)中使用Mongoid(3.1.2)。我有三个型号:

class User
  include Mongoid::Document
  field :name
  has_many :collections
end

class Collection
  include Mongoid::Document
  field :name
  belongs_to :user
  has_many :things
end

class Thing
  include Mongoid::Document
  field :name
  belongs_to :collection
end

所以基本上有一个用户拥有收藏品,而且收藏品中有" Things"。 嗯......第一个问题:这甚至可能吗?如果没有:为什么不呢? ; - )

我现在可以创建用户(从rails控制台或通过web),我可以创建属于用户的集合。但是,当我试图创造一个" Thing"现在......好吧它没有被创造出来:

2.0.0-p0 :014 >   u = User.first
 => #<User _id: 514b2b32e05658e1f1000005, name: "test"> 
2.0.0-p0 :015 > c = Collection.create!(name: "somename", user: u)
 => #<Collection _id: 514b30f0e05658ca67000001, name: "somename", user_id: "514b2b32e05658e1f1000005"> 
2.0.0-p0 :016 > t = Thing.create!(name: "a thing", collection: c)
 => #<Thing _id: 514b3120e05658ca67000002, name: "a thing", collection_id: "514b30f0e05658ca67000001"> 
2.0.0-p0 :017 > Thing.first
 => nil 

&#34; Collection&#34;创建得很好:

2.0.0-p0 :018 > Collection.first
 => #<Collection _id: 514b2b65e05658e1f1000006, name: "test", user_id: "514b2b32e05658e1f1000005"> 

1 个答案:

答案 0 :(得分:0)

将Collection类名改为其他名称,比如说'Stockpile'。 MongoDB使用“集合”作为其术语的一部分,因此它可能不适合您的模型。