Валидаторы, подтверждение пароля
Я не могу понять, почему модель не проверяет подтверждение пароля, это код модели:
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%>
Ошибок не возникает, если пароль не соответствует.
Ответы
Ответ 1
Я просто сожгла это. Я подозреваю, что ваше значение подтверждения nil
. Из документов:
ПРИМЕЧАНИЕ. Эта проверка выполняется только в том случае, если password_confirmation не ноль, и по умолчанию только при сохранении. Требовать подтвердите, не забудьте добавить проверка наличия подтверждения Атрибут:
Кроме того, вам не нужно attr_accessor :password_confirmation
, так как проверка добавляет его для вас. Rails!
Ответ 2
Если вы используете массовое задание, вам нужно добавить пароль в attr_accessible
.
attr_accessor
создаст виртуальный атрибут, но то же самое не будет доступно для массового присвоения
В идеале мы не должны добавлять password_confirmation
к attr_accessible
, validates_confirmation_of
должны проверять значение password
и password_confirmation
, но значение password_confirmation
приближается к нулю. Я добавил password_confirmation
в attr_accessible и работает нормально
Работа с Rails 3.