2014-02-06 5 views
1

У меня есть две модели:Mongoid: Как синхронизировать обе стороны отношения HABTM?

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

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

По какой-то причине объект группа не имеет все user_ids. Может быть, потому что я использую мангоидную альфа-версию.

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

Хотя большой вопрос почему эти документы несинхр, сейчас мне нужно знать, как синхронизировать их в этой точке.

Спасибо заранее,

Виктор

ответ

0

я нашел, почему документы, где несинхр. Я ставил группу в новом пользовательском объекте (не сохранялись):

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

Согласно mongoid docs, он хранит group_ids в user, но не в group:

Model # {имя} = Установить связанные документы. Если родительский документ имеет значение , то он будет сохранен немедленно вместе с родителем , чтобы сохранить согласованные ключи. Если установить нуль или [], то дети будут удалены.

Чтобы исправить эту проблему, я спас группу после того, как пользователь будет сохранен: group.save

Учитывая, что у меня была только одна группа, и что пользователи сохранялось сейчас, я сделал следующую задачу рейка для синхронизации данных :

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

users.each do |user| 
    g = user.groups.first 
    user.groups = [g] 
    user.save 
end 
Смежные вопросы