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 はコメント テーブルの名前、body はコメント テーブル内の列の名前です。

これは、ネストされた属性がある場合に適用されます

post.rb

has_many: comments
accept_nested_attributes_for: comment

コメント.rb

belongs_to: post
于 2016-05-25T08:32:29.623 に答える