Mongoid多对多,这是正常的吗?

时间:2010-11-16 16:43:36

标签: ruby-on-rails mongodb many-to-many mongoid

以下是我的模特:

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

我首先通过种子,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') 

我注意到两件事:

1)它将角色添加为User集合中的引用。

2)它在Role集合中创建第3个角色。

这有点奇怪,因为现在我有3个角色:用户,艺术家和用户。第二个User集合有一个user_ids引用,其中包含foobar的id。

这是正常的吗?

1 个答案:

答案 0 :(得分:1)

我认为你更愿意这样做:

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

这样就不会创建角色对象,但会将引用添加到现有记录中。