Rails 3 update_attribute не стреляет - PullRequest
0 голосов
/ 10 июля 2011

У меня есть модель участника с методом 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 Ответ

2 голосов
/ 10 июля 2011

Попробуйте удалить attr_accessor из вашей модели. attr_accessor создает методы чтения и записи для new_password_token. Метод писателя эквивалентен:

def new_password_token=(new_password_token)
  @new_password_token = new_password_token
end

Итак, когда вы update_attribute, это просто установка переменной экземпляра для вашего объекта и обход базы данных в целом.

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