Цепные отношения (1:n:m) с Mongoid и Rails

Я пытаюсь добиться действительно простых «множественных отношений» в 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

Итак, в основном есть пользователь, у которого есть коллекции, и есть коллекции, в которых есть «Вещи». Ну... первый вопрос: это вообще возможно? И если нет, то почему? ;-)

Теперь я могу создавать пользователей (из консоли rails или через Интернет) и создавать коллекции, принадлежащие пользователям. Но когда я сейчас пытаюсь создать "Вещь"... она просто не создается:

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 

«Коллекция» создается просто отлично:

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

person jlxq0    schedule 21.03.2013    source источник
comment
Что произойдет, если вы измените имя модели коллекции на что-то другое, скажем, на «Stockpile».   -  person Jason Prins    schedule 22.03.2013
comment
Джейсон... отличный намек! Кажется, это проблема. Я переименовал свою модель, и она работает так, как ожидалось. Теперь, как я могу отметить ваш комментарий как ответ?   -  person jlxq0    schedule 22.03.2013


Ответы (1)


Измените имя класса Collection на другое, скажем, на «Stockpile». MongoDB использует «коллекцию» как часть своей терминологии, поэтому она может плохо работать с вашими моделями.

person Jason Prins    schedule 22.03.2013