【问题标题】:Mongoid: How to sync both sides of a HABTM relation?Mongoid:如何同步 HABTM 关系的双方?
【发布时间】:2014-02-06 23:46:07
【问题描述】:

我有两个模型:

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]

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

提前致谢,

维克多

【问题讨论】:

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


    【解决方案1】:

    我找到了为什么文件在哪里不同步。我在一个新的用户对象中设置组(不持久):

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

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

    Model#{name}= 设置相关文件。 如果父文档是 坚持,那么孩​​子将立即与 parent 保持键一致。 如果设置为 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-29
      • 2013-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多