使用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.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。