如果您还没有看过,请查看最新的 railscast authentication in rails 3.1 。他在生成模型时使用 password_digest:string 并将 has_secret_password 添加到 User 模型中。他还添加了一些accessible_attributes、:password 和:password_confirmation。
通过使用 validates_confirmation_of :password 我们可以确保在创建实例之前确认密码。如果我将表单中的密码字段留空,则会收到以下错误消息:
ruby-1.9.2-p180 :024 > u = User.new
=> #<User id: nil, name: nil, email: nil, password_digest: nil, created_at: nil, updated_at: nil>
ruby-1.9.2-p180 :027 > u.save
(0.4ms) SELECT 1 FROM "users" WHERE "users"."email" = '' LIMIT 1
=> false
ruby-1.9.2-p180 :028 > u.errors.full_messages
=> ["Password digest can't be blank"]
当然,我们不想在与用户交流时将密码字段称为“密码摘要”。如何更改此错误消息?
奖金问题
当使用 validates_confirmation_of 并使用不匹配的密码时,我收到两条错误消息告诉我,只有 :password 标签和输入标签被 fields_with_errors div 包围。如果密码不匹配,我还想突出显示 password_confirmation 输入,如果可能,将其从密码部分完全删除。
我应该编写自己的方法来检查密码确认吗?如果是这样,您能否提供一些小指南?
最佳答案
解决此问题的官方方法是将以下内容添加到您的语言环境文件中:
en:
activerecord:
attributes:
user:
password_digest: 'Password'
英语语言环境文件位于
config/locales/en.yml
。您可能必须重新启动服务器才能将更改加载到您的环境中。
关于ruby-on-rails - RoR 3.1 中的 password_digest、has_secret_password 和表单验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6336332/