我有一个Group
模型,HABTM things
:
class Group
has_and_belongs_to_many :things, inverse_of: nil
end
在控制台中:
group = Group.last
group.valid?
>> true
group.persisted?
>> true
array_of_things = [thing1, thing2]
group.things.concat array_of_things
>> [object1, object2]
group.reload.things
>> []
group.things = array_of_things
>> [object1, object2]
group.reload.things
>> []
两种情况下的轻便摩托车记录器:
UPDATE database=bd collection=groups selector={:_id=>BSON::ObjectId('123')} update={"$push"=>{"thing_ids"=>[BSON::ObjectId('456'), BSON::ObjectId('789')]}} flags=[:multi]
COMMAND database=bd command={:getlasterror=>1, :w=>1} runtime: 0.7225ms
这有效:
array_of_things.each { |thing| group.things << thing }
group.reload.things
>> [thing1, thing2]
记录器:
UPDATE database=bd collection=groups selector={"_id"=>BSON::ObjectId('123')} update={"$addToSet"=>{"thing_ids"=>{"$each"=>[BSON::ObjectId('456')]}}} flags=[]
COMMAND database=bd command={:getlasterror=>1, :w=>1} runtime: 0.5413ms
UPDATE database=bd collection=groups selector={"_id"=>BSON::ObjectId('123')} update={"$addToSet"=>{"thing_ids"=>{"$each"=>[BSON::ObjectId('789')]}}} flags=[]
COMMAND database=bd command={:getlasterror=>1, :w=>1} runtime: 0.3517ms
我不知道:getlasterror=>1
是否有事可做,但第二种情况仍然存在。
我错过了什么?
提前致谢!
PS:Mongoid 4(主分支),Ruby 2和Rails 4。
答案 0 :(得分:0)
首先,我没有看到你遇到的问题。也就是说,我得到了:
group.things.concat array_of_things
>> [object1, object2]
group.reload.things
>> [object1, object2]
group.things = array_of_things
>> [object1, object2]
group.reload.things
>> [object1, object2]
我正在运行旧版本的mongoid(2.4.12)。
我注意到你有一个拼写错误,当你reload
时,你在groups
上做了,但它应该在group
上。这可能是你没有得到你期望的原因吗?