验证器,密码确认

时间:2011-01-15 01:29:44

标签: ruby-on-rails-3 validation password-confirmation

我无法弄清楚为什么模型不会检查密码确认,这是模型的代码:

class User < ActiveRecord::Base
  attr_accessor :password_confirmation
  validates :email, :presence =>true,
                    :uniqueness=>true
  validates :password, :presence =>true,
                    :length => { :minimum => 5, :maximum => 40 },
                    :confirmation =>true
  validates_confirmation_of :password
end

控制器用于从视图中获取数据并尝试执行保存,这是视图的代码:

<h1>Registration process</h1>
<%= form_for(@new_user) do |f|%>
<% if @new_user.errors.any? %>
  <div id="errorExplanation">
    <h2><%= pluralize(@new_user.errors.count, "error") %> prohibited this article from being saved:</h2>
    <ul>
    <% @new_user.errors.full_messages.each do |msg| %>
      <li><%= msg %></li>
    <% end %>
    </ul>
  </div>
  <% end %>
    <%= f.label :email %><br />
    <%= f.text_field :email %><br />
    <%= f.label :password %><br />
    <%= f.password_field :password %><br />
    <%= f.label :password_confirmation %><br />
    <%= f.password_field :password_confirmation %>
    <%#TODO Confirm password%>

    <%= f.submit 'Join' %>
<%end%>

如果密码不匹配,则不会出现错误。

2 个答案:

答案 0 :(得分:36)

我也被这个人烧了。我怀疑您的确认值为nil。来自文档:

  

注意:仅在以下情况下执行此检查   password_confirmation不是nil,而且   默认情况下仅保存。要求   确认,请务必添加   存在检查确认   属性:

此外,您不需要attr_accessor :password_confirmation,因为验证会为您添加它。导轨!

答案 1 :(得分:1)

如果您使用的是批量作业,则需要将密码添加到attr_accessibleattr_accessor将创建一个虚拟属性,但同样不能用于质量分配 理想情况下,我们不应将password_confirmation添加到attr_accessiblevalidates_confirmation_of应该验证passwordpassword_confirmation的值,但password_confirmation的值是来吧。我将password_confirmation添加到a​​ttr_accessible并且它正常运行

使用Rails 3。