ruby-on-rails – rails 4 has_secure_password渲染密码确认可选

使用rails 4我在我的用户模型中使用has_secure_password,技巧说如果我没有设置:password_confirmation它将永远不会被触发,但为什么当我运行测试时我得到错误:密码确认不能为空如下:
Failures:

1) User 
 Failure/Error: it { should be_valid }
   expected #<User id: nil,name: "joe",email: "joe@mail.com",created_at: nil,updated_at: nil,password_digest: "$2a$04$mcRr/msgYQR3kBVc3kv/m.UotBJuJuSXZKMw
   /eHTvU87..."> to be valid,but got errors: Password confirmation can't be blank

我的测试文件看起来像:

require 'spec_helper'

describe User do

   before { @user = User.new(name: 'joe',email: 'joe@mail.com',password: 'foo') }

   subject { @user }
   #....
   #....
   describe "when password is not present" do
     before { @user.password = "" }
     it { should_not be_valid }
   end
end

为什么我得到这个错误,有一个解决方案呢?谢谢

解决方法

在测试之前将测试更改为:
before { @user = User.new(
  name: 'joe',password: 'foo',password_confirmation: 'foo')  #<== this line!
}

那应该解决它.

这是关于:

您知道在几乎任何网站上创建新帐户时,他们会要求您输入密码并输入两次吗?这就是这个.当您创建新用户时,has_secure_password需要两次密码以确保您没有输入错误.

如果密码!= password_confirmation,它将抛出异常并且不会创建用户.

同样,这仅用于用户创建.您无需在登录表单或其他任何内容中输入两个密码.您不必将此字段添加到模型或数据库中.

如果您有一个用户创建表单,并且您不想拥有password_confirmation字段,那么您不必这样做.在调用save之前,您可以在控制器中设置password_confirmation = password.

但是对于用户创建,必须存在password_confirmation.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...