Mongoid:如何同步HABTM关系的两边?

时间:2014-02-06 23:46:07

标签: ruby-on-rails ruby-on-rails-4 mongoid mongoid4

我有两种模式:

class User
  ...
  has_and_belongs_to_many :groups
  ...
end

class Group
  ...
  has_and_belongs_to_many :users
  ...
end

由于某种原因,组对象没有全部user_ids。也许,因为我正在使用mongoid 4 alpha版本。

Group _id: 123, user_ids: [1, 2, 4]
User _id: 3, group_ids: [123, 456]

虽然最大的问题是为什么这些文档不同步,但现在我需要知道如何同步它们。

提前致谢,

维克多

1 个答案:

答案 0 :(得分:0)

我找到了为什么文件不同步。我在新用户对象中设置了组(未保留):

group = Group.last
user = User.new
user.groups = [group]
user.save

根据mongoid docs,它将group_ids存储在user中,但不存储在group中:

  

Model#{name} =设置相关文档。 如果是父文档   坚持下去,然后孩子将立即与之一起得救   父母保持密钥一致。如果设置为nil或[]则   孩子们将被删除。

要解决此问题,请在保存用户后保存该组:group.save

鉴于我只有一个组并且用户现在已经保留,我执行了以下rake任务来同步数据:

users = User.in(group_ids: group.id)

users.each do |user|
  g = user.groups.first
  user.groups = [g]
  user.save
end