Rails 5中的密码确认

gdf*_*dfg 4 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%>
Run Code Online (Sandbox Code Playgroud)

添加用户的控制器代码:

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
Run Code Online (Sandbox Code Playgroud)

这些是模型中的验证:

validates :name, presence: true
validates :email, presence: true
validates :password, presence: true
validates :password, confirmation: { case_sensitive: true }
Run Code Online (Sandbox Code Playgroud)

但是confirmation password不起作用.

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

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

我究竟做错了什么 ?

Mik*_*iet 5

您需要添加password_confirmationuser_params控制器.

def user_params
    params.require(:user).permit(:name, :email, :password, :password_confirmation)
end
Run Code Online (Sandbox Code Playgroud)