has_secure_password 検証をスキップする方法 質問する

has_secure_password 検証をスキップする方法 質問する

私のアプリでは、管理者だけが新しいユーザー レコードを作成できます。ユーザーには、パスワードを設定するアクティベーション リンクがメールで送信されます。

has_secure_passordメソッドを使いたいのですが(レールキャスト):

class User < ActiveRecord::Base
  has_secure_password
  ...
end

うまく機能しますが、パスワード ダイジェストの存在を自動的に検証します...そのため、管理者がレコードを作成すると、検証は失敗します。追加した他の検証をスキップせずに、自動的に追加された password_digest 検証だけをスキップする方法はありますか?

ベストアンサー1

Rails 4.X バージョン以降では、has_secure_password:validations オプションを使用できます。 に設定するとfalse、検証は実行されません。

gemの3.Xバージョンはこのパラメータをサポートしていません。ただし、activemodel/lib/active_model/secure_password.rbをバックポートすることは可能です。最新の 4.0.XRC コードこれはこの議論を裏付けるものです。

そのため、コードは次のようになります。

class User < ActiveRecord::Base
  has_secure_password :validations => false
  ...
end

おすすめ記事