Ruby on Rails: атрибут обновления
Google серьезно подводит меня прямо сейчас. Все, что мне нужно сделать, это обновить один атрибут, назначив пользователя admin, из консоли Heroku rails.
Я не могу найти ни одного простого ответа. То, что я пытался это:
Record.update_attribute(:roles_mask, "1")
Где запись является правильной записью.
'неопределенный метод' обновить атрибут ''
Я не могу просто напечатать Record.roles_mask = 1
?
РЕДАКТИРОВАТЬ.
Я использовал Record, и я не должен был этого делать в примере. Я сделал именно это:
ian = User.where(:id => '5')
ian.update_attribute(:roles_mask, '1')
Error: undefined method 'update_attributes'
3 ответа
Проблема в том, что с помощью .where
Функция создает отношение, а не находит саму запись. Сделай это:
ian = User.find(5)
ian.update_attribute(:roles_mask, '1')
Или если вы хотите использовать .where
тогда вы могли бы сделать это:
ian = User.where(:id => 5)
ian.first.update_attribute(:roles_mask, '1')
РЕДАКТИРОВАТЬ
Посмотрите этот ответ для деталей о том, почему это происходит.
Чтобы использовать update_attribute (или update_attributes), вам нужно вызывать это из экземпляра, а не из класса.
rails c> rec = Record.find(1)
rails c> rec.update_attribute(:att, 'value')
rails c> rec.update_attributes(att: 'value', att2: 'value2')
Я думаю, что это должно решить вашу проблему.
Где предложение возвращает массив, и вы пытаетесь сделать запрос на обновление массива, поэтому вы получили ошибку.
Вы должны попытаться найти первую запись
ian = User.where(:id => 1).first
or
ian = User.find(1)
or
ian = User.find_by_id(1)
Теперь ваш запрос на обновление будет работать.
ian.update_attribute(:roles_mask, '1')