Rails 5中的密码确认

时间:2017-06-13 20:01:57

标签: ruby-on-rails ruby-on-rails-5

这是我的观点:

<%=form_for [:admin, @user] do |f|%>

    <ul>
        <% @user.errors.full_messages.each do |msg| %>
            <li><%= msg %></li>
        <% end %>
    </ul>

    <%=f.label :name %>
    <%=f.text_field :name %>


    <%=f.label :email %>
    <%=f.text_field :email %>

    <%=f.label :password %>
    <%=f.password_field :password %>

    <%=f.label :password_confirmation %>
    <%=f.password_field :password_confirmation%>

    <%=f.submit "Submit" %>
<%end%>

添加用户的控制器代码:

def create
    @user = User.new(user_params)

    if @user.save
        redirect_to admin_users_path
    else
        render 'new'
    end
end

private
def user_params
    params.require(:user).permit(:name, :email, :password)
end

这些是模型中的验证:

validates :name, presence: true
validates :email, presence: true
validates :password, presence: true
validates :password, confirmation: { case_sensitive: true }

confirmation password不起作用。

验证适用于所有(它们是必需的)表单元素,但第二个密码输入 - password_confirmation除外,它可以与第一个密码输入不同。

即使第二个密码输入为空,也会将用户添加到数据库中,因为在验证规则中没有规则。

我做错了什么?

2 个答案:

答案 0 :(得分:5)

您需要在控制器中将password_confirmation添加到user_params

def user_params
    params.require(:user).permit(:name, :email, :password, :password_confirmation)
end

答案 1 :(得分:-1)

尝试:validates_confirmation_of :password

型号:

class Person < ActiveRecord::Base
  validates_confirmation_of :user_name, :password
  validates_confirmation_of :email_address, :message => "should match confirmation"
end

查看:

<%= password_field "person", "password" %>
<%= password_field "person", "password_confirmation" %>

您可以查看validates_confirmation_of