Mongoid Наследование потомков выпускают в ruby-debug - PullRequest
0 голосов
/ 30 октября 2011

У меня проблема с наследованием монгоидов. У меня есть почтовый индекс с наследниками от класса 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]

1 Ответ

0 голосов
/ 09 ноября 2011

Обнаружено, что решение пришлось изменить

config.cache_classes = true 

в config / environment / development.rb.Это порождает наследство в рельсах иногда, по-видимому.

...