Mongo Mapper在循环期间不会销毁文档

时间:2015-11-04 16:57:59

标签: ruby mongodb sinatra mongomapper

这一定是一个简单的答案,但我感到困惑。我正在使用Mongo Mapper运行Sinatra应用程序,并尝试销毁与rem_users数组中的用户ID关联的少量文档。以下循环为rem_users的每个元素查找关联的GroupMember,并尝试删除它。当我运行它时,GroupMember不会被销毁。

rem_users.each do |du_id|
  ###
  GroupMember.first('$and' => [{dealer_user_id: du_id}, {group_id: g.id}] ).destroy
end

rem_users是一个已转换为字符串的BSON ID数组。我已经验证了查询正在使用此查询提取正确的GroupMember,如果我将一个binding.pry放在示例中的###并复制粘贴循环的下一行,则会成功销毁GroupMember 。我试过了:

remgm = GroupMember.all('$and' => [{group_id: g.id}, {dealer_user_id: rem_users}])
remgm.each {|gm| GroupMember.destroy(gm.id)}

,结果是一样的。 GroupMember模型没有任何类型的验证。谢谢!

1 个答案:

答案 0 :(得分:0)

想出来:

因此,该集团被加载到该区块的顶部:

g = Group.find(params[:group_id])
redirect '/' unless g

...

rem_users.each do |du_id|
  ###
  GroupMember.first('$and' => [{dealer_user_id: du_id}, {group_id: g.id}]   ).destroy
end

g.save 

然后在发生破坏之后保存了。因此,当g被加载时,它会加载g.members。循环正在正确地完成所有操作,但是在保存已经加载的Group后,我重新保存了所有被破坏的GroupMembers。

我所要做的就是在移除用户之前保存该组,并且销毁按预期工作。