Voici mes modèles:Mongoid many-to-many, est-ce normal?
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
J'ai d'abord créer les rôles par graines, rake db: graines. Mon fichier de départ contient:
puts '*** Add default roles'
[
{ :name => 'User' },
{ :name => 'Artist' }
].each do |h|
Role.create(h)
end
Les rôles sont créés avec succès. Cependant, quand j'ajouter un rôle à un utilisateur, je fais:
foobar = User.first
foobar.roles.create(:name => 'User')
Je remarque 2 choses:
1) Il ajoute le rôle de référence dans la collection de l'utilisateur.
2) Il crée un 3ème rôle dans la collection Role.
C'est un peu étrange car j'ai maintenant 3 rôles: Utilisateur, Artiste et Utilisateur. La deuxième collection User a une référence user_ids qui contient l'identifiant de foobar.
Est-ce normal?
Oui, il semble que ce soit fait correctement. Par chance, savez-vous comment supprimer la référence après l'avoir ajoutée avec "<<"? –
@ Christian Eh bien, c'est un bon. Je ne suis pas un utilisateur expérimenté de Mongoid, mais j'essaierais 'foobar.roles.find (: name => 'User'). Destroy'. À mon avis, cela déconnecte les deux entités, et ne détruit pas le rôle complet. Mais certainement le tester longtemps avant la production. :) – pestaa
Hmmm. Juste essayé .destroy et apparemment il supprime le rôle complet dans la collection de rôles. Merci pour la tentative si :-) –