我将Mongoid3.1.4与Moped1.5.1、MongodB2.4.1和Ruby1.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.disesss.count时,我可以看到数据库中成功创建的问题,但是我得到了上面提到的异常。

最佳答案

好吧,过了几天我终于解决了这个问题。
在我的苦恼模型中,我有一个before-create回调函数,它试图更新practice父对象上的字段。不知怎么的,这使得moped创建了一个错误的请求,使得mongodb失败。
我在创建回调之前更改了创建回调,现在一切正常。
希望这能帮助别人。

关于mongodb - 创建嵌入对象时的Moped::Errors::OperationFailure,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25370419/

10-11 04:29
查看更多