Mongoid embeds_many Тип Ограничения - PullRequest
0 голосов
/ 16 июля 2011

Я пытаюсь создать отношение embeds_many в mongoid, и оно, похоже, не применяет ограничения типа для объектов, которые я добавляю в коллекцию. Я что-то здесь не так делаю или это умышленно?

class Item
  include Mongoid::Document
  embeds_many :extra_fields, class_name: "ItemType"
end

class ItemType
  include Mongoid::Document
  embedded_in :item
  field :type_name
end

class Category
  include Mongoid::Document
  embeds_many :schema_fields
  field :rabble
end


ruby > Item.delete_all
 => 1 

ruby > item = Item.new
 => #<Item _id: 4e20a60a401b3e47d2000004, _type: nil> 

ruby > item.extra_fields << Category.new(:rabble => 'derp')
 => [#<Category _id: 4e20a619401b3e47d2000005, _type: nil, rabble: "derp">] 

ruby > item.save
 => true 

ruby > item = Item.first
 => #<Item _id: 4e20a60a401b3e47d2000004, _type: nil> 

ruby > item.extra_fields[0].rabble
 => "derp"

Ответы [ 2 ]

0 голосов
/ 17 июля 2011

думаю, что class_name не предназначено для проверки, это просто переопределение, которое

указывает на монгоид, что Item должен искать в классе ItemType обратную связь а не класс с именем ExtraField

да, Mongo изначально не имеет проверки, но ActiveRecord действительно не добавляет ограничений в базовую базу данных либо

как и все вещи Руби, разберись с силой, которая нам дана

0 голосов
/ 17 июля 2011

Поскольку MongoDB не имеет схемы, для Mongoid не обязательно применять тип добавляемого класса. В вашем примере вы только дамп item.extra_fields[0].rabble, он установлен на derp. Поскольку он не имеет схемы, в MongoDB не является критической ошибкой сохранение поля, существующего в одной модели, но не в другой. Если вы делаете item.extra_fields[0].class, вы должны увидеть ItemType, потому что он использует class_name, установленный вами для определения используемого класса.

Это также может быть просто недосмотр, я не вижу каких-либо ошибок, размещенных вдоль этих строк на GitHub для Mongoid. Вы должны опубликовать его на https://github.com/mongoid/mongoid/issues и сообщить им, если это просто упущение.

...