Запись has_many: through с: условия не удается связать из-за массовой защиты присваивания - PullRequest
0 голосов
/ 06 июня 2011

У меня есть 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. И я действительно не могу отключить это, потому что я немного обеспокоен тем, что люди смогут редактировать форму, чтобы повысить свою роль до лидера.

Какие-нибудь советы?

1 Ответ

0 голосов
/ 06 июня 2011

Рассматривали ли вы фильтр before_save для защиты поля "роль" от пользователей, которые не должны иметь к нему доступ?таким образом, вы можете отключить attr_protected.

В приложении, над которым я работаю, мы используем devise и настраиваемые пользовательские разрешения и просто проверяем разрешения на выбранные поля непосредственно перед сохранением.

...