has_many: через значения по умолчанию - PullRequest
1 голос
/ 26 апреля 2010

Мне нужно спроектировать систему для отслеживания членства пользователей в группах с разными ролями (в настоящее время три).

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).

1 Ответ

0 голосов
/ 26 апреля 2010

Вы всегда можете добавить триггеры в своей модели членства для обработки назначений, подобных этому, при их создании. Например:

class Membership < ActiveRecord::Base
  before_save :assign_default_role

protected
  def assign_default_role
    self.role = Role.find_by_name('user')
  end
end

Это всего лишь адаптация вашего примера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...