У меня проблема с наследованием монгоидов. У меня есть почтовый индекс с наследниками от класса Location обоих документов mongoid. Он имеет следующую простую структуру наследования:
class Zipcode < Location
Также у меня есть объект, который заполняет объект Zipcode, используя 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 && [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]