自定义消息,validation是否存在无效

我的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 

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

我的工作是:

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

这是由于validates方法的工作原理。 它假定您在指定时查找MessageValidator :message作为传递给validates的哈希中的键。

这可以通过重建查询来解决,如下所示:

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