0

私のアプリケーションでは、ユーザー確認プロセスがあります。ユーザーがサインアップすると、次の4つのことが起こります。

  1. account_status_idが1に設定されている(未確認)
  2. ユーザーがサインインしています(現在、current_userが存在します)
  3. new_account_confirmation_tokenが生成されます
  4. new_account_confirmation_tokenを含むリンクが記載された確認メールが新しいユーザーに送信されます

私は最初、この方法で確認リンクを処理しようとしました。問題なくユーザーを見つけ、コードはupdate_attributesを流れます!メソッド、ただし、account_statusを更新していませんでした。私が知る限り、current_userオブジェクトが存在するため、更新しようとしているユーザーImはすでに「メモリ内」にあります。あれは正しいですか?

  def new_account_confirmation
    @title = "Account Confirmation"
    logger.info("User is not logged in")
    @user = User.find_by_new_account_confirmation_token(params[:confirm_id])      
    if @user
      @user.update_attributes!(:account_status_id => 2)
    else
      redirect_to root_path
    end
  end

私の回避策は次のとおりです。以下のコードは機能しますが、上記のコードが機能しない理由を知りたいのですが。account_statusを更新しないのはなぜですか?

  def new_account_confirmation
    @title = "Account Confirmation"
    if current_user
      logger.info("User is logged in")
      current_user.update_attributes!(:account_status_id => 2)
    else
      logger.info("User is not logged in")
      @user = User.find_by_new_account_confirmation_token(params[:confirm_id])      
      if @user
        @user.update_attributes!(:account_status_id => 2)
      else
        redirect_to root_path
      end
    end
  end
4

1 に答える 1

0

あなたが言うようにユーザーが「メモリ内」にいる場合でも、それが更新されない理由にはなりません。更新は行われていると思いますがcurrent_user、 と同期していないため表示されません@user

@user更新されていないことをどのように確認しているのかわかりませんがupdate_attributes!、エラーがスローされていない場合は保存されています。

于 2012-05-04T16:35:38.657 に答える