Authlogic - как установить password_confirmation только для обновления?
Я пытаюсь настроить подтверждение пароля только на той странице, где пользователь меняет свой пароль. Моя модель выглядит так:
class User < ActiveRecord::Base
attr_accessor :password_confirmation
acts_as_authentic do |c|
c.validate_login_field = false
c.validate_password_field = false
c.require_password_confirmation = true
c.logged_in_timeout(15.minutes)
end
validates :name, :presence => {:message => 'cannot be blank.'}, :allow_blank => true, :length => {:minimum => 3, :maximum => 40}, :on => :create
validates :email, :presence => {:message => 'address cannot be blank.'}, :allow_blank => true, :format => {:with => /\A[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]+\z/, :message => 'address is not valid. Please, fix it.'}, :uniqueness => true
validates :password, :presence => {:message => 'cannot be blank.'}, :allow_blank => true, :length => { :minimum => 6, :maximum => 40}, :on => :create
validates :password_confirmation, :presence => {:message => 'cannot be blank.'}, :allow_blank => true, :length => { :minimum => 6, :maximum => 40 }, :on => :update
end
и мой метод сохранения нового пароля:
def change_password
@user = current_user
if @user.valid_password?(params[:user][:old_password])
if @user.update_attributes(params[:user].reject{|key, value| key == "old_password"})
flash[:notice] = 'Your password was successfuly changed.'
redirect_to :back
else
flash[:warning] = 'You did not fill twice your new password correctly. Please, fix it.'
redirect_to :back
end
else
flash[:warning] = 'Your old password is WRONG! What is your malfunction!?!'
redirect_to :back
end
end
Моя проблема в том, что если я установлю форму старого пароля, то новый пароль (например, новый_пароль) и затем подтверждение нового пароля (например, новый_пароль1), поэтому новый пароль будет изменен и сохранен в базе данных - но это не должен, потому что новый пароль и подтверждение нового пароля не совпадают...
Как мне установить правила проверки или где могут быть проблемы?
Спасибо за советы
1 ответ
Вам необходимо подтвердить пароль только в случае его изменения. Если он не изменяется, то проверка для password
поле должно быть пропущено.
Railscasts.com эпизод № 41 показывает вам, как это сделать.