带有验证不工作存在的自定义消息

Dav*_*vid 3 validation ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2

我的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
Run Code Online (Sandbox Code Playgroud)

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

我开始工作的是:

validate do |user|
  user.errors['password'] = "can't be less than 6 characters" if user.password_digest.nil?
end
Run Code Online (Sandbox Code Playgroud)

Kev*_*erg 6

这是由于该validates方法的工作方式。它假定您正在寻找MessageValidator指定:message为传递给 的散列中的键的时间validates

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

validates :password_digest, :presence => { :message => "The password has to be 6 or more characters long" }
Run Code Online (Sandbox Code Playgroud)