我面临着类似的问题。它根本不关心 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 是初始化期间使用的一种 mongoid 方法。
希望对您有所帮助。