Подтвердить что ты не робот

Проблемы с проверкой при ручном обновлении значения атрибута в консоли Rails

У меня простая проблема. Я хочу изменить значение поля для моей User.find(1) в консоли rails.

Я пробовал:

u = User.find(1)
u.update_attributes(roles_mask: 3)

И получил false. Когда я проверяю u.errors.full_messages, я вижу это потому, что есть проблема с проверкой пароля от has_secure_password. Как я могу обновить его вручную в консоли?

4b9b3361

Ответ 1

если вы хотите обойти проверку, используйте

# skip validations but run callbacks
u.update_attribute :roles_mask, 3

или

# do the update on the sql so no validation and callback is executed
u.update_column :roles_mask, 3

Ответ 2

Сначала вы должны аутентифицировать пользователя, затем вы можете обновить пользователя, посмотрев здесь

u = User.find(1)
u.authenticate("password")
u.update_attributes(roles_mask: 3)

Или, если вы хотите пропустить валидации, вы можете сделать следующее:

u = User.find(1)
u.update_attribute :roles_mask, 3

Ответ 3

Вы можете попробовать update_attribute(:roles_mask, 3) или update_column(:roles_mask, 3).

Ответ 4

У вас может быть что-то вроде этого

Post.find(1).comments.first.update(body: "hello")

или

@u = Post.find(1)
@u.comments.first.update(body: "hello")

где комментарии - это имя таблицы комментариев, тело - это имя столбца в таблице комментариев.

Это применимо, если у вас есть вложенный атрибут

post.rb

has_many: comments
accept_nested_attributes_for: comment

comment.rb

belongs_to: post