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')
Другие вопросы по тегам