私のアプリケーションでは、ユーザー確認プロセスがあります。ユーザーがサインアップすると、次の4つのことが起こります。
- account_status_idが1に設定されている(未確認)
- ユーザーがサインインしています(現在、current_userが存在します)
- new_account_confirmation_tokenが生成されます
- 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