3

私のUserモデルには以下が含まれています:

validates :password_digest, :presence => true, :message => "The password has to be 6 or     more characters long"  

def password=(password)
  self.password_digest = BCrypt::Password.create(password) if password.length >= 6
end

問題は、 が機能messageしてvalidatesいないことです。Unknown validator: 'MessageValidator'エラーが発生します。presence検証が機能する方法は、password_digestnilであるかどうかをチェックするだけでpassword、長さが 6 未満であると仮定しました。私が試みたように、エレガントなソリューションが必要です。私はこれを1つの方法で解決しましたが、私がしようとしていることがうまくいかない理由と、それをうまく機能させる方法があることを理解していただければ幸いです.

私が仕事をするようになったのは:

validate do |user|
  user.errors['password'] = "can't be less than 6 characters" if user.password_digest.nil?
end
4

1 に答える 1

7

これは、validatesメソッドがどのように機能するかによるものです。に渡されたハッシュでキーとしてMessageValidator指定すると、 を探していると想定されます。:messagevalidates

これは、次のようにクエリを再構築することで解決できます。

validates :password_digest, :presence => { :message => "The password has to be 6 or more characters long" }
于 2013-08-15T22:11:55.537 に答える