В моем обновленном профиле пользователя первое поле просит пользователя ввести свой текущий пароль.Когда она отправляет форму, я проверяю пароль, прежде чем принять изменения в других полях.Вот как я сейчас делаю это в пользовательском контроллере:
def update
@user = User.find(params[:id])
if @user.has_password?(params[:user][:password])
if @user.update_attributes(params[:user])
flash[:success] = "Profile updated."
redirect_to @user
else
render 'edit'
end
else
flash[:failure] = "Password does not match!"
render 'edit'
end
end
Я чувствую, что есть лучший способ сделать это.Например, я мог бы сделать пароль, соответствующий проверке в пользовательской модели.Тогда formtastic автоматически обработает для меня сообщение об ошибке (в отличие от моего уродливого подхода флэш-памяти выше).Я попытался сделать это с
validate :password_match?, :on => :update
И
def password_match?
has_password(params[:user][:password])
end
Но так как подозреваемые параметры не доступны из модели.
Я искал SO в течение 20 минут, чтобы найти способчтобы сделать это, не смог найти ничего, что не включало бы Devise или Authlogic.Я делаю аутентификацию с нуля (все отлично работает: вход, сеансы и т. Д.).
Пожалуйста, покажите мне свет лучше!