Валидаторы, подтверждение пароля - PullRequest
18 голосов
/ 15 января 2011

Я не могу понять, почему модель не проверяет подтверждение пароля, это код модели:

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 ]

36 голосов
/ 05 мая 2011

Я тоже сгорел от этого.Я подозреваю, что ваше значение подтверждения nil.Из документов:

ПРИМЕЧАНИЕ. Эта проверка выполняется только в том случае, если значение password_confirmation не равно nil, и по умолчанию только при сохранении.Чтобы требовать подтверждения, обязательно добавьте проверку присутствия для атрибута подтверждения:

Такжеattr_accessor :password_confirmation вам не нужен, так как проверка добавляет его для вас.Рельсы!

1 голос
/ 07 июня 2012

Если вы используете массовое назначение, вам нужно добавить пароль к attr_accessible. attr_accessor создаст виртуальный атрибут, но он не будет доступен для массового назначения В идеале мы не должны добавлять password_confirmation к attr_accessible, validates_confirmation_of должны проверять значения password и password_confirmation, но значение password_confirmation приближается. Я добавил password_confirmation в attr_accessible, и он работает нормально

Работа с Rails 3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...