Ответ 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
У меня простая проблема. Я хочу изменить значение поля для моей User.find(1)
в консоли rails.
Я пробовал:
u = User.find(1)
u.update_attributes(roles_mask: 3)
И получил false
. Когда я проверяю u.errors.full_messages
, я вижу это потому, что есть проблема с проверкой пароля от has_secure_password
. Как я могу обновить его вручную в консоли?
если вы хотите обойти проверку, используйте
# 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
Сначала вы должны аутентифицировать пользователя, затем вы можете обновить пользователя, посмотрев здесь
u = User.find(1)
u.authenticate("password")
u.update_attributes(roles_mask: 3)
Или, если вы хотите пропустить валидации, вы можете сделать следующее:
u = User.find(1)
u.update_attribute :roles_mask, 3
Вы можете попробовать update_attribute(:roles_mask, 3)
или update_column(:roles_mask, 3)
.
У вас может быть что-то вроде этого
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