2017-08-15 49 views
0

我需要帮助让我的用户注册表单来验证密码和password_confirmation完全匹配。Rails的password_confirmation不起作用

当前表单会将输入的数据传递到数据库中的密码摘要字段,并且会接受password_confirmation字段中的任何输入,并且不会给出任何错误。

我的代码如下;

型号 - user.rb

class User < ApplicationRecord 

    before_save { self.email = email.downcase } 
    #attr_accessible :user_name, :email 
    validates_confirmation_of :password 
    has_secure_password 

    validates :user_name, presence: true, length: { maximum: 25 } 
    VALID_EMAIL_REGEX = /\A[\w+\-.][email protected][a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+\z/i 
    validates :email, presence: true, length: { maximum: 255 }, format: { with: VALID_EMAIL_REGEX } 
    validates :password, presence: true, confirmation: true, length: { minimum: 6 } 

    has_many :trips 
    has_many :countries, through: :trips 

end 

视图 - new.html.erb

<div class="container"> 
    <h1 class="text-center" style="margin-top: 10px;" >Sign up</h1> 
    <div class="row"> 
    <div class="col-md-6 offset-md-3 "> 
     <%=form_for(@user) do |f| %> 
     <%= render 'shared/error_messages' %> 
     <div class="form-group"> 
     <%= f.label :user_name, "Username" %> 
     <%= f.text_field :user_name, class: "form-control" %> 
     </div> 

     <div class="form-group"> 
     <%= f.label :email %> 
     <%= f.email_field :email, class: "form-control" %> 
     </div> 

     <div class="form-group"> 
     <%= f.label :password %> 
     <%= f.password_field :password, class: "form-control" %> 
     </div> 

     <div class="form-group"> 
     <%= f.label :password_confirmation, "Password Confirmation" %> 
     <%= f.password_field :password_confirmation, class: "form-control" %> 
     </div> 

     <div class="form-group"> 
     <%= f.submit "Create an account", class: 'form-control btn btn-primary' %> 
     </div> 
     <% end %> 
    </div> 
    </div> 
</div> 

我也有bcrypt -v 3.1.7在我的Gemfile。如果需要其他信息,请告诉我,我很乐意提供。

+0

你的表中是否有password_digest列? – hashrocket

+0

你的控制器如何? – Yana

回答

1

我认为你没有得到的password_confirmation,要做到这一点,你应该添加

validates :password_confirmation, presence: true 

而且,在你的控制器,你应该加入白名单:password_confirmation到您的许可证部分。

仅当password_confirmation不为零时,验证确认才会生效。

+0

谢谢我认为问题出现在我的许可证中的密码为password_confirmation的控制器中。 奇怪的是,我最初在for:password_confirmation中有validates语句,但它给了我一个表单中的错误,所以我把它拿出来了。但是,我做了两个更改,现在它正在工作。 –