Встроенные документы Mongoid не могут преобразовать строку в целочисленную ошибку

У меня есть этот документ, называющий его Блог, Пост, с embeds_many :posts, который сам по себе embeds_many :comments. Это выдавало мне ошибку «Не удается преобразовать строку в целое число», когда я пытался сохранить некоторые блоги. После расследования я обнаружил встроенные почтовые документы с пустыми данными, все поля равны нулю, и эти почтовые объекты будут давать ту же ошибку «невозможно преобразовать строку в целое число».

Почему это было nil, может быть что-то из моего кода, но проблема в том, что я не могу сохранить, обновить или уничтожить этот пост или что-то сделать с комментариями, поэтому я застрял. Мне нужно вручную войти в консоль mongodb и удалить эти объекты.

Любая идея, почему это происходит и как с этим справиться?

Если это имеет какое-либо отношение, я использую MongoHQ.


person Bashar Abdullah    schedule 02.02.2013    source источник


Ответы (1)


Я сталкиваюсь с аналогичной проблемой. Это вообще не касается сервиса 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
comment
Рад, что это работает для вас, и спасибо, что поделились им. Но в моем случае я не использую зарезервированный метод монгоидов. Возможно, что-то похожее, но, думаю, принципиально другое. - person Bashar Abdullah; 20.11.2013
comment
На самом деле проблема снова всплывает для меня. Я получаю ту же ошибку, но с другой трассировкой стека: : в `[]' - person ProxyGear; 22.11.2013
comment
@BasharAbdullah Можете ли вы предоставить трассировку стека? - person ProxyGear; 22.11.2013
comment
Я посмотрю, сохраняется ли проблема, и тогда сообщу вам трек. Я как бы игнорировал это в течение долгого времени, поэтому не уверен, смогу ли я регенерировать. - person Bashar Abdullah; 22.11.2013