Ruby on rails 设计和密码确认验证

Ruby on rails 设计和密码确认验证,ruby-on-rails,validation,testing,devise,Ruby On Rails,Validation,Testing,Devise,我在设计和密码确认方面遇到了问题。 我在rails4中创建了一个模型测试,如下所示: test“用户需要密码\u确认”do user=FactoryGirl.build(:user) 断言user.valid?,“FactoryGirl应返回有效用户” user.password\u confirmation=nil #这些只是一些输出来验证发生了什么。 #这是Devisions的密码_中要求的条件?方法 放!user.persistend?| |!user.password.nil?| |!u

我在设计和密码确认方面遇到了问题。 我在rails4中创建了一个模型测试,如下所示:

test“用户需要密码\u确认”do
user=FactoryGirl.build(:user)
断言user.valid?,“FactoryGirl应返回有效用户”
user.password\u confirmation=nil
#这些只是一些输出来验证发生了什么。
#这是Devisions的密码_中要求的条件?方法
放!user.persistend?| |!user.password.nil?| |!user.password_confirmation.nil?#=>真的
放置user.valid?#=>真的
断言用户。无效?,“需要密码确认”#此处失败
断言_等于1,user.errors.size,“应该只发生一个错误。#{user.errors.full_messages}”
结束
此测试在第二次断言时失败(
“需要密码确认”

以下是我的完整用户模型:

validates :password,    confirmation: true
class用户login.downcase}])
其他的
在哪里(条件)。首先
结束
结束
def实体
self.user\u entity.try(:entity)
结束
def实体=(新实体)
self.build\u user\u实体(实体:newEntity)
结束
结束
我已尝试在我的用户模型中添加:

validates :password,    confirmation: true
之后,测试通过,但下一个测试出现错误:

  1) Failure:
UserTest#test_user_requires_a_password [/my/project/test/models/user_test.rb:52]:
Two errors should have occured. ["Password confirmation doesn't match confirmation", "Password confirmation doesn't match confirmation", "Password can't be blank"].
Expected: 2
  Actual: 3
正如您所看到的,这就像确认验证发生了两次,但两次都失败了

我正在使用rails4(edge)和rails4分支进行设计

编辑: 我试着设置

user.password_confirmation = "#{user.password}_diff"

测试通过了。那么,当设置了
nil
时,为什么会忽略确认?由于对象尚未持久化,我假设必须提供密码确认。

我知道这是一个老问题,但我遇到了同样的问题

首先,将其从模型中删除,这样您就不会得到重复的验证检查:

validates :password, confirmation: true
然后添加以下内容。我将其更改为仅在创建上工作:

validates :password_confirmation, presence: true, on: :create
请参见的验证确认部分:

注意:仅当密码确认不为零时,才执行此检查。要要求确认,请确保为确认属性添加状态检查:

验证是否存在:密码确认,如果::密码已更改