У меня есть 3 класса: группа и пользователь, соединенные таблицей соединений, которая называется членство. Членство имеет атрибут «роль», который говорит нам о роли, которую пользователь играет в группе.
группа
has_many :leaderships, :class_name => 'Membership', :conditions => {:role => "leader"}
has_many :leaders, :through => :leaderships, :source => :user
Это позволяет мне сказать
g = group.new
g.leaders.build(:name => 'Tom')
И по волшебству Rails я получаю этот SQL (наряду с вставкой записи в пользователей)
INSERT INTO `memberships` (`group_id`, `role`, `user_id`) VALUES (262, 'leader', 1291)
Т.е. он действительно знает, как создать членство с role = "leader". Hurray.
Однако, это нарушается, когда я делаю "роль" attr_protected. И я действительно не могу отключить это, потому что я немного обеспокоен тем, что люди смогут редактировать форму, чтобы повысить свою роль до лидера.
Какие-нибудь советы?