44

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

我试过:

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

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

4

4 回答 4

72

如果要绕过验证,请使用

# 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
于 2013-02-27T11:26:34.857 回答
11

您必须先对用户进行身份验证,然后才能更新用户,看看这里

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

或者,如果您想跳过验证,您可以执行以下操作;

u = User.find(1)
u.update_attribute :roles_mask, 3
于 2013-02-27T11:26:42.237 回答
5

你可以试试update_attribute(:roles_mask, 3)update_column(:roles_mask, 3)

于 2013-02-27T11:26:50.430 回答
4

你可以有这样的东西

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

或者

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

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

这适用于嵌套属性

post.rb

has_many: comments
accept_nested_attributes_for: comment

comment.rb

belongs_to: post
于 2016-05-25T08:32:29.623 回答