Проблема с наследием Mongoid в ruby-debug

#ruby-on-rails-3 #inheritance #mongoid #nested-attributes #ruby-1.9

#ruby-on-rails-3 #наследование #mongoid #вложенные атрибуты #ruby-1.9

Вопрос:

У меня проблема с наследованием mongoid. У меня есть почтовый индекс, который наследует от Location class оба документа mongoid. Он имеет следующую простую структуру наследования:

 class Zipcode < Location
 

Также у меня есть объект, который заполняет объект почтового индекса с помощью nested_attributes. Я заметил, что когда он пытается создать объект Zipcode, вместо этого он создает объект Location. В моем тестовом коде все работает нормально, но в моем производственном коде все работает неправильно.

После запуска ruby-debug над моим кодом я обнаружил следующее поведение в файле: ~/work/Project/bson/ruby/1.9.1/gems/mongoid-2.2.3/lib/mongoid/document.rb:277

 Breakpoint 2 at /Users/pc/work/Project/bson/ruby/1.9.1/gems/mongoid-2.2.3/lib/mongoid/document.rb:277
/Users/pc/work/Project/bson/ruby/1.9.1/gems/mongoid-2.2.3/lib/mongoid/document.rb:277
@_type ||= [descendants   [self]].flatten.uniq.map { |t| t.to_s }
(rdb:48) p descendants
[]
(rdb:48) p Zipcode.ancestors amp;amp; [Location]
[Location]
(rdb:48) p descendants
[Zipcode]
(rdb:48)
 

Смотрите, странно, что потомки (которые находятся в BasicObject) заполняются при Zipcode.ancestors вызове. Я использую Ruby1.9.2, Mongoid 2.2.3 и Rails3.1.1.

Вопросы: Есть ли что-то особенное в синтаксисе mongoid для получения наследования во вложенных атрибутах? Есть ли проблема, которую необходимо исправить в mongoid, rails или ruby?

Обновить:

Просто чтобы показать, что взлом тестового кода работает с первого раза:

 Breakpoint 1 at /Users/pc/work/Project/bson/ruby/1.9.1/gems/mongoid-2.2.3/lib/mongoid/document.rb:277
/Users/pc/work/Project/bson/ruby/1.9.1/gems/mongoid-2.2.3/lib/mongoid/document.rb:277
@_type ||= [descendants   [self]].flatten.uniq.map { |t| t.to_s }
(rdb:1) p descendants
[Zipcode]
 

Ответ №1:

Найденное решение пришлось изменить

 config.cache_classes = true 
 

в config/environments/development.rb. По-видимому, это иногда нарушает наследование в rails.