这是我的观点:
<%=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
除外,它可以与第一个密码输入不同。
即使第二个密码输入为空,也会将用户添加到数据库中,因为在验证规则中没有规则。
我做错了什么?
答案 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" %>