创建嵌入对象时的Moped :: Errors :: OperationFailure

时间:2014-08-18 19:10:45

标签: mongodb mongoid3 moped

我正在使用mongoid 3.1.4与轻便摩托车1.5.1,mongodb 2.4.1和红宝石1.9.3。

我有下一个型号:

class Practice
  include Mongoid::Document
  embeds_many :distresses
end

class Distress
  include Mongoid::Document
  embedded_in :practice
end

当我做这样的事情似乎工作时:

practice = Practice.create
practice.distresses.create

但是当我在配置文件中放置 safe:true 时我会这样做,然后我得到:

Moped::Errors::OperationFailure: The operation: #<Moped::Protocol::Command
  @length=82
  @request_id=22
  @response_to=0
  @op_code=2004
  @flags=[]
  @full_collection_name="collection.$cmd"
  @skip=0
  @limit=-1
  @selector={:getlasterror=>1, :safe=>true}
  @fields=nil>

实际上,我在以任何方式创建遇险时都遇到了错误。这也引发了例外:

practice = Practice.create
distress = practice.distresses.build
distress.save

当我查看practice.distresses.count时,我可以看到在数据库中成功创建的困扰,但是我得到了上面提到的异常。

1 个答案:

答案 0 :(得分:3)

好的,几天后我就能解决这个问题了。

在我的遇险模型中,我有一个 before_create 回调试图更新Practice父对象上的字段。不知何故,这会让Moped创建一个错误的请求,使MongoDB失败。

我为 after_create 更改了 before_create 回调,现在一切正常。

希望这有助于其他人。