has_secure_password предотвращает установку логического значения в true

Я хочу сделать подтверждение по электронной почте после настройки входа / регистрации и сеансов с использованием метода has_secure_password и authenticate. У меня есть пользовательская модель, и я добавил подтвержденное логическое значение. Когда пользователь создается, я устанавливаю для его подтвержденного логического значения значение false и отправляю ему электронное письмо со ссылкой. При щелчке по ссылке генерируется запрос GET для /users/:id/ verify, и выполняется код действия "verify" в users_controller, который выглядит следующим образом:


def confirm
    @user = User.find(params[:id])
    @user.update_attributes(confirmed: true)
    if @user.save 
      sign_in(@user)
      flash[:success] = "Your account has been successfully confirmed"
    else
      flash[:error] = "There has been a problem confirming your account "
    end 
     redirect_to root_path
  end

Очень просто (я сделаю проверку токена позже). Моя проблема в том, что мой пользователь никогда не сохраняется.

@user.errors.full_messages
возвращает:

["Password is too short", "Password confirmation can't be blank"]

Как я могу изменить объект пользователя без необходимости каждый раз редактировать его пароль? Любая помощь будет принята с благодарностью.

Спасибо!

1 ответ

Решение

Попробуйте использовать update_attribute вместо update_attributes.

  @user.update_attribute(:confirmed, true)
Другие вопросы по тегам