使用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.