ruby-on-rails - rails 4 has_secure_password 呈现密码确认可选

标签 ruby-on-rails

带 rails 4 我使用 has_secure_password 在我的用户模型中,trick 说如果我不设置 :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

为什么我收到这个错误,有解决方案吗?谢谢

最佳答案

长话短说

has_secure_password validations: false # This is the key to the solution
validates :password, presence: true, length: { minimum: 6 } # Or an length you want

长篇大论
  • docsthe source code说:

    If you don’t need the confirmation validation, just don’t set any value to the password_confirmation attribute and the the validation will not be triggered.

  • 但他们也说:

    Validations for presence of password on create, confirmation of password (using a +password_confirmation+ attribute) are automatically added. If you wish to turn off validations, pass validations: false as an argument. You can add more validations by hand if need be.

  • 第 1 项不是完整的描述。我们需要关闭所有验证
    并添加我们自己的验证规则,使这项工作如第 2 点所述。

  • 我花了一些时间在这上面得到了一个教训:当你感到困惑时找到源代码。这似乎是一种痛苦的方式或艰难的方式,但有时它是正确的方式。

    关于ruby-on-rails - rails 4 has_secure_password 呈现密码确认可选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17954996/

    相关文章:

    ruby-on-rails - rails 3 + 设计 : how change a flash message NOT in locale file?

    javascript - jQuery UI Dialog 而不是 Rails 3 数据确认属性的 alert()

    ruby-on-rails - 使用 slim 时,脚踏分页无法正常工作

    ruby-on-rails - 尝试设置 .SSH key 以通过 Cygwin 连接到 Github

    ruby-on-rails - Rails 使用系统版本的 ruby​​ 而不是 Chruby set default

    ruby-on-rails - Rails 引擎路径助手不包含挂载命名空间

    ruby-on-rails - 可以安装多根 ActionCable 电缆吗?

    ruby-on-rails - rails : Serialize value as comma-separated and not as YAML

    ruby-on-rails - 限制每个用户上传到 AWS S3 的总大小 (MB)(使用 Shrine)

    ruby-on-rails - 未初始化的常量 Sass::Rails::SassTemplate