Обновление атрибутов модели - PullRequest
6 голосов
/ 16 мая 2011

У меня есть приложение Rails, которое представляет собой платформу для блогов, в которой могут участвовать несколько авторов.Моя модель Пользователь имеет логический атрибут : writer для назначения разрешений на запись.Однако : модуль записи НЕ указан в списке attr_accessible для модели Пользователь .

Я хотел бы отредактировать этот атрибут через Интернет без необходимости запускать

User.find_by_id(user_id).update_attribute(:writer, true/false)

через консоль, но мне интересно, было бы это невозможно без перечисления : писатель в attr_accessible для модели User .У меня есть несколько страниц, доступных только администраторам, и я хотел бы иметь возможность переключать атрибут : writer в этих представлениях.

Если это действительно возможно, как это можно сделать?Заранее благодарю за помощь!

Редактировать: Исходя из пары полученных ответов, я чувствую, что должен был быть более конкретным в своем вопросе.Приношу извинения.Я понимаю, что я все еще мог бы по отдельности обновить атрибут : writer , как указали Берлингтон и Хитеш.Я хотел знать, как можно реализовать такую ​​функцию через представление.Можно ли сделать кликабельную ссылку, чтобы переключить состояние: writer?Возможно ли, чтобы ссылка вызывала функцию контроллера и передавала соответствующее user_id для : writer toggling?

Ответы [ 2 ]

7 голосов
/ 16 мая 2011

attr_accessible и attr_protected защищают только атрибуты от массового назначения . Вы все еще можете назначить их с помощью других средств:

Массовое назначение (не будет работать):

model.update_attributes(:admin => true)

Не массовое назначение (вариант 1):

model.admin = boolean
model.save

Немассовое присвоение (вариант 2):

model.send(:attributes=, attributes, false)

Не массовое присвоение (вариант 3):

model.update_attribute(admin, boolean)

Мне лично не нравятся эти опции вручную, поэтому я написал гем под названием sudo_attributes , который упрощает переопределение массового назначения с помощью методов "sudo".

1 голос
/ 16 мая 2011

используйте это

User.find_by_id(user_id).update_attribute(:writer, true) or 
User.find_by_id(user_id).update_attribute(:writer, false)
...