2012-01-04 6 views
0

私はDevailsを認証に使用しているRailsアプリケーションを持っています。 Deviseをクリックすると、パスワードをリセットするためのリンクが記載された電子メールを受け取ることができます。Devise PasswordControllerをユーザー検証をスキップさせるにはどうすればよいですか?

ユーザーが新しいパスワードを入力すると、Devise::PasswordsController#editが呼び出されますが、パスワードはUserモデルで実際に更新され、保存されます。

私の問題は、Userにパスワードリセット中に失敗する可能性のある検証があり、ユーザーモデルに変更を保存できないことです。 パスワードをリセットするときに、その検証を無視したいです。

どうすればいいですか?

答えて

0

パスワード確認が空白の(パスワードを変更していない)場合、その検証を実行しないユーザーモデルで条件付き検証をセットアップします。これを達成するには、以下を使用してください:

validates :accepted_terms_at, 
    :presence => {:if => proc {|u| u.password_confirmation.blank?}} 

あなたの妥当性確認のためのアップデート。 ActiveModelのバリデーションでは、実行するprocを提供できます。条件付きで検証するifと:unless。そのprocは現在のインスタンス(あなたのケースのユーザーインスタンス)を渡して、検証を実行するかどうかを決定します。

ありがとうございます!

関連する問題