供参考: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
除了密码的状态验证器外,一切都按预期工作。如何将消息更改为我的消息?
答案 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