Mongoid HABTM逆nil没有持久的孩子有concat或=

时间:2013-11-30 23:21:02

标签: ruby-on-rails ruby mongoid

我有一个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。

1 个答案:

答案 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上。这可能是你没有得到你期望的原因吗?