Ruby on rails 密码摘要,在RoR 3.1中有密码和表单验证
如果您还没有看到,请查看最新的railscast。他在生成模型时使用password\u digest:string,并将has\u secret\u密码添加到用户模型中。他还添加了一些可访问的属性:password和:password\u confirmation 通过使用validates\u confirmation\u of:password,我们可以确保在创建实例之前确认密码。如果我将表单中的密码字段留空,则会收到以下错误消息:Ruby on rails 密码摘要,在RoR 3.1中有密码和表单验证,ruby-on-rails,validation,Ruby On Rails,Validation,如果您还没有看到,请查看最新的railscast。他在生成模型时使用password\u digest:string,并将has\u secret\u密码添加到用户模型中。他还添加了一些可访问的属性:password和:password\u confirmation 通过使用validates\u confirmation\u of:password,我们可以确保在创建实例之前确认密码。如果我将表单中的密码字段留空,则会收到以下错误消息: ruby-1.9.2-p180 :024 > u
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"]
当然,我们不希望在与用户通信时调用密码字段password digest。如何更改此错误消息
奖金问题
当使用validates_confirmation_of和使用不匹配的密码时,我会收到两条错误消息,告诉我这一点,并且只有:password标签和input标记被带有_errors div的字段_包围。如果密码不匹配,我还想突出显示密码确认输入,如果可能,将其从密码部分删除
我是否应该编写自己的密码确认检查方法?如果是这样,您能提供一些小的指导吗?您可以覆盖human\u attribute\u name方法,并设置您自己的人性化版本的password\u digest属性。试着这样做:
HUMANIZED_ATTRIBUTES = {
:password_digest => "Password"
}
def self.human_attribute_name(attr, options={})
HUMANIZED_ATTRIBUTES[attr.to_sym] || super
end
那么您的错误应该如下所示:密码不能为空解决此问题的正式方法是将以下内容添加到您的区域设置文件中:
en:
activerecord:
attributes:
user:
password_digest: 'Password'
英语语言环境文件位于config/locales/en.yml。您可能必须重新启动服务器才能在您的环境中加载更改。要删除密码摘要消息,您可以修改视图:
<% @user.errors.messages.delete(:password_digest) -%>
复制为完美,如此简单!谢谢你,这是最好的答案。