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

问题是messageinvalidates不起作用。我得到一个Unknown validator: 'MessageValidator'错误。我假设验证的工作方式是presence它只检查is ,它的长度小于 6。我想要一个优雅的解决方案,就像我尝试的那样。我已经以一种方式解决了这个问题,但我真的很感激理解为什么我正在尝试的东西不起作用,有没有办法让它起作用。password_digestnilpassword

我要做的是:

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当您指定:message为传递给的哈希中的键时validates

这可以通过如下重构查询来解决:

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