我使用的是Mongoid3.1.4,同时还使用了moped 1.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但是,当我在我的配置文件中放置: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时,我可以看到在数据库中成功创建的问题,但是我得到了上面提到的异常。
发布于 2014-08-25 15:59:56
好吧,过了几天我就解决了这个问题。
在我的危难模型中,我有一个before_create回调,试图更新实践父对象上的一个字段。不知怎么的,这使得Moped创建了一个错误的请求,使MongoDB失败。
我将before_create回调改为after_create,现在一切都正常了。
希望这能帮到别人。
https://stackoverflow.com/questions/25370419
复制相似问题