3

私のuserモデルでは、次のような検証がpasswordあります。instance method

class User < ActiveRecord::Base
  validate :email ......
  validates :password, length: { minimum: 6 }

  def my_method
    # .....
    # save!
  end
end

このメソッド内でわかるように、いくつかのフィールドを変更した後にユーザーを保存するメソッドへの呼び出しがあるため、パスワードの検証save!をスキップしたいのですが、ユーザー インスタンスを呼び出したときにのみ他の検証をスキップしたいのですが、これを行う方法お願いします ?ありがとうございましたmy_method

4

2 に答える 2

2

誰かが興味深い場合は解決策を見つけます。attr_accessor :skip_password_validationモデルに追加するだけで、パスワードの検証に条件を追加し、ユーザーモデルのインスタンスを使用してコントローラーをvalidates :password, length: { minimum: 6 }, unless: :skip_password_validation呼び出すときに、上記の属性をtrueに設定します。これですべてです。ユーザー モデルは次のようになります。my_method

class User < ActiveRecord::Base
  validate :email ......
  validates :password, length: { minimum: 6 }, unless: :skip_password_validation
  attr_accessor :skip_password_validation

  def my_method
    # .....
    # save!
  end
end

user.my_methodを呼び出す前に、コントローラーで: という行を追加するだけです。user.skip_password_validation = true

これがお役に立てば幸いです:)

于 2013-08-11T14:58:48.343 に答える