如何更改Rails 4 has_secure_password Presence消息?

时间:2016-01-01 02:40:25

标签: ruby-on-rails ruby bcrypt

供参考:Rails 4,bcrypt 3.1.7,以及我使用simple_form gem

在我的模型中,我有这段代码:

class User < ActiveRecord::Base
  has_secure_password

  validates :email,    presence: {message: 'You must provide an email'},
                         format: { with: /@/, message: 'Please enter a valid email' }
  validates :name,     presence: {message: 'You must enter your first name'}
  # TODO: Make validation message work
  validates :password, presence: {message: 'You must enter a password'},
                         length: {minimum: 8,
                                  message: 'Your password must contain at least 8 characters'}
end

除了密码的状态验证器外,一切都按预期工作。如何将消息更改为我的消息?

1 个答案:

答案 0 :(得分:2)

点击has_secure_password此处的文档:http://api.rubyonrails.org/classes/ActiveModel/SecurePassword/ClassMethods.html

如您所见,您可以取消默认验证:

has_secure_password validations: false

这应该允许您使用密码的自定义验证。

请注意,您现在还需要明确添加密码确认验证。这是has_secure_password中您可以使用的那个:

validates_confirmation_of :password, allow_blank: true

所以对于一切,你的模型看起来像这样:

class User < ActiveRecord::Base
  has_secure_password validations: false

  .
  .
  .

  validates :password, presence: {message: 'You must enter a password'},
                       length: {minimum: 8,
                       message: 'Your password must contain at least 8 characters'}
  validates_confirmation_of :password, allow_blank: true
end

修改

如果您只想更改消息并仍然使用has_secure_password附带的默认验证,则可以修改en.yml文件:

config/locales/en.yml

en:
  activerecord:
    errors:
      models:
        user:
          attributes:
            password:
              blank: "You must enter a password"

然后,对于:password,您只需要添加最低密码验证,因为has_secure_password不包含该验证:

class User < ActiveRecord::Base
  has_secure_password

  .
  .
  .

  validates :password, length: {
    minimum: 8,
    message: 'Your password must contain at least 8 characters'
  }
end