Мне нужно спроектировать систему для отслеживания членства пользователей в группах с разными ролями (в настоящее время три).
class Group < ActiveRecord::Base
has_many :memberships
has_many :users, :through => :memberships
end
class Role < ActiveRecord::Base
has_many :memberships
has_many :users, :through => :memberships
end
class Membership < ActiveRecord::Base
belongs_to :user
belongs_to :role
belongs_to :group
end
class User < ActiveRecord::Base
has_many :memberships
has_many :groups, :through => :memberships
end
В идеале я хочу просто установить
@group.users << @user
и членство имеет правильную роль. Я могу использовать: условия для выбора данных, которые были вставлены вручную, как таковые:
:conditions => ["memberships.role_id= ? ", Grouprole.find_by_name('user')]
Но при создании членства в группе значение role_id не устанавливается.
Есть ли способ сделать это, поскольку в настоящее время у меня есть несколько повторяющихся фрагментов кода для каждой роли пользователя в моей модели группы.
ОБНОВЛЕНО
Следует отметить, что в идеале идентификатор должен быть похож на
@group.admins << @user
@group.moderators << @user
Это создаст членство в группе и соответственно назначит роль членства (role_id).