Ruby on rails 密码摘要,在RoR 3.1中有密码和表单验证

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

如果您还没有看到,请查看最新的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 = 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) -%>

复制为完美,如此简单!谢谢你,这是最好的答案。