Tout d'abord lorsque vous avez association has_and_belongs_to_many vous actualy ne pas le modèle, vous avez seulement table de base de données avec le nom pluriel combiné à partir de modèles qui participent en association, par exemple
class User < ActiveRecord::Base
has_and_belongs_to_many :roles
end
class Role < ActiveRecord::Base
has_and_belongs_to_many :users
end
Vous n » t obtenir un modèle nommé UserRoles, ou UsersRoles, ou UsersRole ou n'importe quel type de modèle, cela rend seulement certaines méthodes que vous pouvez utiliser sur l'instance User ou Role pour trouver tous ses rôles, ou pour trouver tous les utilisateurs avec un rôle four etc.
Cela fonctionne, que les rails chercheront la table de base de données avec le nom roles_users (il cherche la table qui est combinée avec les deux noms de modèles au pluriel, classant par ordre alphabétique, c'est pourquoi ses roles_users et non user_roles).
Pour utilisateur particulier, vous pouvez ajouter des rôles ou prédéfinir ceux qui existent déjà, par exemple:
# find one user
user = User.first
# get collection of roles
roles_c = Role.where("some conditional statement to find roles")
# set user roles to found collection
user.roles = roles_c
# save changes
user.save
De cette façon, vous obtiendrez des enregistrements dans la table roles_users avec user_id de l'utilisateur et pour chaque rôle dans la collecte roles_c il y aura enregistrement, par exemple:
# if user.id is 1
# and in roles_c you have 3 roles with id_s 2,5 and 34
# in roles_users table there will be created 3 records with
user_id => 1, role_id => 2
user_id => 1, role_id => 5
user_id => 1, role_id => 34
Autre moyen est d'ajouter certains rôles,
user = User.first
roles_c = Role.where('conditional statement')
user.roles << roles_c
user.save
remerciements pour yo ur aider tout le monde, mais j'ai toujours une erreur lors de la migration: Une erreur s'est produite, toutes les migrations ultérieures ont été annulées: constante non initialisée CreateRolesUsers :: RolesUser == CreateRolesUsers: migration - create_table (: rôles_users, {: id => false}) -> 0.0470s J'utilise que: roles_users = RolesUser.new (: role_id => 2,: user_id => 1) roles_users.save! j'avais déjà établi des relations de HBTM dans Rôle et modèles utilisateur: rôle de classe
Assurez-vous que votre fichier de migration est appelé [version] _create_roles_users.rb – andi
quelle est la signification de 'item' et' order' ici? – inquisitive