1

我有这个文档叫它博客,帖子,带有 embeds_many :posts,它本身就是 embeds_many :comments。当我尝试保存一些博客时,它给了我错误“无法将字符串转换为整数”。经过调查,我发现嵌入的帖子文档包含空数据,所有字段为零,并且这些帖子对象会给出相同的错误“无法将字符串转换为整数”错误。

为什么它是 nil 可能来自我的代码,但问题是我无法保存、更新或销毁这篇文章或对评论做任何事情,所以我被卡住了。我必须手动登录到 mongodb 控制台并删除这些对象。

知道为什么会发生这种情况以及如何处理吗?

如果有任何关系,我正在使用 MongoHQ。

4

1 回答 1

2

我面临着类似的问题。它根本不关心 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 方法。

希望对您有所帮助。

于 2013-11-19T17:03:31.113 回答