2017-01-08 6 views
1

を働いていないupdate_attibutes、方法があります。いくつかの妥当性確認では行動を停止しています次に、端末でコマンドを実行します。Rubyは私が管理者としてユーザーを設定しようとしています

u = User.find_by_id(3) 
u.update_attributes(admin: true) 
(0.1ms) rollback transaction 
=> false 
u.errors 
@messages={:password=>["Choose a password", "Your password must be at least 4 characters 
"], :password_confirmation=>["You must confirm your password 
"]} 

したがって、アクションでパスワードの検証が呼び出されるため、ユーザーを管理者として更新することはできません。

パスワードとupdate_password検証がupdate_attributesで呼び出されている理由は誰にも分かりますか?

+0

いいえいいえ、:formatオブジェクトを返します。私が印刷するとき:flash [:notice] = "ユーザー#{user.name}は管理者ユーザーです"正しい名前が表示されます。 –

+0

は、検証が書かれたユーザーのモデルファイルを投稿することができます – user3775217

答えて

1

update_attributes方法は、(あなたのケースでuser)オブジェクトのパラメータperform_validations = truesaveメソッドを呼び出している理由を私は理解していません。したがって、update_attributesメソッドを呼び出した後に、ユーザーが持つ検証モデルが実行されます。それは自然な振る舞いです。

update_attributeメソッドを使用して検証を実行しないことがあります。それはあなたが使用可能なupdate_column代わり

+0

ありがとうございます。私は "user.update_attributes"を "user.update_columns"に変更するだけで、うまくいきます。 –

+0

問題が解決してうれしい! – VAD

0

update_attributes方法は、モデルの検証とコールバックをトリガーするかもしれパラメータperform_validations = false

更新

update_attributeがレール4に推奨されていませんとsaveメソッドを呼び出します。 update_attributesメソッドの代わりにupdate_columnメソッドを試してください。

関連する問題