Rails 3 update_attribute не стреляет
У меня есть модель члена с методом reset_token (который назначает пользователю новый токен, чтобы отправить ему электронное письмо для сброса пароля). Но update_attribute никогда ничего не сохраняет в базе данных. У меня есть:new_password_token, назначенный для attr_accessible и attr_accessor. Журнал собирает соль и жетон, но всегда возвращает ноль
def self.reset_token(email)
member = find_by_email(email)
if member
#Reset token, and then send email
salt = BCrypt::Engine.generate_salt
logger.error "Salt is #{salt}"
token = BCrypt::Engine.hash_secret(email, salt)
logger.error "token is #{token}"
if member.update_attribute(:new_password_token, token)
member
end
end
nil
end
Метод контроллера, в котором он называется:
def reset_password
@member = Member.reset_token(params[:email])
if @member
redirect_to(root_url, :notice => "Please check your email for instructions")
else
redirect_to(root_url, :notice => "Sorry we have no record of your account")
end
end
1 ответ
Решение
Попробуйте удалить attr_accessor из вашей модели. attr_accessor создает методы чтения и записи для new_password_token. Метод писателя эквивалентен:
def new_password_token=(new_password_token)
@new_password_token = new_password_token
end
Итак, когда вы update_attribute
это просто установка переменной экземпляра для вашего объекта и вообще обход базы данных.