Mongoid многие ко многим, это нормально? - PullRequest
0 голосов
/ 16 ноября 2010

Вот мои модели:

class User
  include Mongoid::Document
  include Mongoid::Timestamps
  references_many :roles, :stored_as => :array, :inverse_of => :users
  ...
end

class Role
  include Mongoid::Document

  field :name, :type => String

  references_many :users, :stored_as => :array, :inverse_of => :roles
  ...
end

Сначала я создаю роли через seed, rake db: seed. Мой исходный файл содержит:

puts '*** Add default roles'
[
  { :name  => 'User' },
  { :name  => 'Artist' }
].each do |h|
  Role.create(h)
end

Роли созданы успешно. Однако, когда я добавляю роль пользователю, я делаю:

foobar = User.first
foobar.roles.create(:name => 'User') 

Я замечаю 2 вещи:

1) Добавляет роль в качестве ссылки в коллекцию пользователей.

2) Создает третью роль в коллекции ролей.

Это немного странно, потому что теперь у меня 3 роли: Пользователь, Исполнитель и Пользователь. Вторая коллекция пользователя имеет ссылку на user_ids, которая содержит идентификатор foobar.

Это нормально?

1 Ответ

1 голос
/ 20 ноября 2010

Я думаю, что вы скорее хотите сделать:

foobar = User.first
foobar.roles << Role.find(:name => 'User')
foobar.save

Таким образом, объект роли не создается, но ссылка добавляется к уже существующей записи.

...