我的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_digest
是否为nil
,password
的长度是否小于6。我想要一个优雅的解决方案,就像我尝试的那样。我已经解决了这个问题,但我真的很感激理解为什么我正在尝试的东西不起作用,并且有办法让它发挥作用。
我的工作是:
validate do |user|
user.errors['password'] = "can't be less than 6 characters" if user.password_digest.nil?
end
答案 0 :(得分:4)
这是由于validates
方法的工作原理。当您将MessageValidator
指定为传递给:message
的哈希中的键时,它假定您正在查找validates
。
这可以通过重建查询来解决:
validates :password_digest, :presence => { :message => "The password has to be 6 or more characters long" }