私は同様の問題に直面しています。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 が失われる可能性があるかどうかを確認します。
---- 編集 && 独自のソリューション ----
デバッガーでスタック トレースを調べると、ある時点で mongoid が _id メソッドを呼び出し、それに対する適切なメソッド応答を見つけることができません。
私の直感は、関係の解決中に何かがモデルの初期化を壊したということでした。
したがって、リレーション定義をトリプルチェックする必要があります。
私の場合、解決策は魔法でした。
embeds_many :fields
#that I replaced by
embeds_many :resource_fields
そして、上に示した class_name 定義では正しく機能しません。なんで ?fields は初期化中に使用されるモンゴイドメソッドだと思うからです。
それがあなたを助けることを願っています。