Rails控制台中手动更新属性值的validation问题

我有一个简单的问题。 我想在rails控制台中为我的User.find(1)更改一些字段值。

我试过了:

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

并得到false回报。 当我检查u.errors.full_messages ,我发现这是因为has_secure_password密码validation存在问题。 如何在控制台中手动更新?

如果你想绕过validation,使用

 # 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 

你必须先authentication用户,然后你可以更新用户在这里看看

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

或者,如果您想跳过validation,您可以按照以下步骤进行操作;

 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") 

其中comments是注释表的名称,body是注释表中的列的名称。

这适用于具有嵌套属性的情况

post.rb

 has_many: comments accept_nested_attributes_for: comment 

comment.rb

 belongs_to: post