我是编程/ rails初学者,遇到了一个我无法解决的错误。
我正在使用/了解" has_secure_password"方法。当我尝试在我的控制台中使用不匹配的密码/ confirm_password创建用户时,控制台返回false并且错误是"密码确认不匹配密码"。但是,当我尝试在给定以下代码(+视图)的UI中做同样的事情时,它保存得很好!现在,请注意我的" user_params"方法,我不小心忘了允许":password_confirmation"这就是我首先注意到这个问题的方法。随着":password_confirmation"补充说,视图会抛出错误,但这不是重点。为什么即使没有这个,也会成功创建新的用户记录,密码和密码确认不匹配,即使它没有保存在控制台中?
这是我的用户模型:
class User < ActiveRecord::Base
has_secure_password
validates :name, presence: true
validates :email, presence: true, format: /\A\S+@\S+\z/, uniqueness: {case_sensitive: false}
validates :password, length: {minimum: 4, allow_blank: true}
end
我的用户控制器:
class UsersController < ApplicationController
def index
@users = User.all
end
def show
@user = User.find(params[:id])
end
def new
@user = User.new
end
def create
@user = User.new(user_params)
if @user.save
redirect_to @user, notice: "Thanks for signing up!"
else
render :new
end
end
private
def user_params
params.require(:user).permit(:name, :email, :password)
end
end
答案 0 :(得分:0)
这是因为password_confirmation属性是可选的。当它未提供给has_secure_password的模型时,模型只接受密码。
如果您的密码确认属性未通过user_params在控制器中列入白名单,则根本不会将其传递给模型,这就是不匹配似乎不会引发错误的原因。事实上,验证根本没有发生。
这适用于您的控制台,因为它创建的用户不需要控制器或强参数白名单。