在Rails控制台中手动更新属性值的验证问题

时间:2013-02-27 11:22:48

标签: ruby-on-rails

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

我试过了:

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

返回了false。当我检查u.errors.full_messages时,我发现这是因为has_secure_password的密码验证存在问题。如何在控制台中手动更新?

4 个答案:

答案 0 :(得分:71)

如果您想绕过验证,请使用

# 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

答案 1 :(得分:11)

您必须先对用户进行身份验证,然后才能更新用户外观here

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

或者,如果您想跳过验证,可按以下步骤操作;

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

答案 2 :(得分:5)

您可以尝试update_attribute(:roles_mask, 3)update_column(:roles_mask, 3)

答案 3 :(得分: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