Я сталкиваюсь с аналогичной проблемой. Это вообще не касается сервиса mongoDB.
Чтобы уточнить
class A
include Mongoid::Document
embeds_many :bs, class_name: 'B'
end
class B
include Mongoid::Document
embedded_in :a, class_name: 'A'
embeds_many :cs, class_name: 'C'
end
class C
include Mongoid::Document
embedded_in :b, class_name: 'B'
end
В моем случае, если я прокомментирую отношения B к C, все работает отлично. Но вскоре я соединяю B и C и получаю следующую трассировку стека:
TypeError - can't convert String into Integer:
() Users/my_user/.rvm/gems/ruby-1.9.3-p194/bundler/gems/mongoid-018e40e11a31/lib/mongoid/relations/proxy.rb:149:in `[]'
() Users/my_user/.rvm/gems/ruby-1.9.3-p194/bundler/gems/mongoid-018e40e11a31/lib/mongoid/relations/proxy.rb:149:in `method_missing'
() Users/my_user/.rvm/gems/ruby-1.9.3-p194/bundler/gems/mongoid-018e40e11a31/lib/mongoid/relations/embedded/many.rb:402:in `method_missing'
() Users/my_user/.rvm/gems/ruby-1.9.3-p194/bundler/gems/mongoid-018e40e11a31/lib/mongoid/fields.rb:75:in `apply_default'
() Users/my_user/.rvm/gems/ruby-1.9.3-p194/bundler/gems/mongoid-018e40e11a31/lib/mongoid/fields.rb:47:in `block in apply_pre_processed_defaults'
() Users/my_user/.rvm/gems/ruby-1.9.3-p194/bundler/gems/mongoid-018e40e11a31/lib/mongoid/fields.rb:46:in `each'
() Users/my_user/.rvm/gems/ruby-1.9.3-p194/bundler/gems/mongoid-018e40e11a31/lib/mongoid/fields.rb:46:in `apply_pre_processed_defaults'
() Users/my_user/.rvm/gems/ruby-1.9.3-p194/bundler/gems/mongoid-018e40e11a31/lib/mongoid/document.rb:110:in `block in initialize'
() Users/my_user/.rvm/gems/ruby-1.9.3-p194/bundler/gems/mongoid-018e40e11a31/lib/mongoid/threaded/lifecycle.rb:84:in `_building'
() Users/my_user/.rvm/gems/ruby-1.9.3-p194/bundler/gems/mongoid-018e40e11a31/lib/mongoid/document.rb:106:in `initialize'
Я попытаюсь проверить отношения через #reflect_on_association, чтобы увидеть, может ли монгоид потеряться.
---- РЕДАКТИРОВАТЬ && собственное решение ----
Изучая трассировку стека с помощью отладчика, он обнаружил, что в какой-то момент mongoid вызывает метод _id и не может найти правильный ответ на него.
Моя интуиция заключалась в том, что что-то сломало инициализацию модели во время разрешения отношений.
Таким образом, вы должны трижды проверить определение отношения.
В моем случае решение пришло по волшебству.
embeds_many :fields
#that I replaced by
embeds_many :resource_fields
И это не работает должным образом с определением class_name, которое я показал выше. Почему ? потому что я предполагаю fields — это монгоидный метод, используемый во время инициализации.
Надеюсь, это поможет вам.
person
ProxyGear
schedule
19.11.2013