Во-первых, когда у вас есть ассоциация has_and_belongs_to_many, у которой у вас нет модели, у вас есть только таблица базы данных с множественным именем, объединенная из моделей, участвующих в ассоциации, например
class User < ActiveRecord::Base
has_and_belongs_to_many :roles
end
class Role < ActiveRecord::Base
has_and_belongs_to_many :users
end
Вы не получаете модель с именем UserRoles, или UsersRoles, или UsersRole, или какую-либо модель, это только делает некоторые методы, которые вы можете использовать в экземпляре User или Role, чтобы найти для 1 пользователя все его роли или найти всех пользователей с определенной ролью и т. д.
Это работает, так что rails будет искать таблицу базы данных с именем role_users (она ищет таблицу, которая объединяется с обоими именами моделей во множественном числе, упорядочивая по алфавиту, поэтому его role_users, а не users_roles).
Для конкретного пользователя вы можете добавить роли или предопределить существующие, например:
# 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
Таким образом, вы получите записи в таблице role_users с user_id пользователя, и для каждой роли в коллекции role_c будет запись, например:
# 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
Другой способ - добавить несколько ролей,
user = User.first
roles_c = Role.where('conditional statement')
user.roles << roles_c
user.save