私は自分のアプリケーションで電子メールの確認プロセスを設定しようとしています。登録時にトークンを生成し、ユーザーに電子メールを送ります。しかし、私が検証リンクをクリックすると、 'users_controller/confirm'アクションのif文とelse文の両方が実行されます。私はroot_pathにリダイレクトされていますが、ユーザーレコードの2つのフィールドが変更されています。レールコンソールからfind_by_tokenを実行すると、予想されるユーザーが返されます。私はmysqlを使用しており、クエリの実行に何らかの待ち時間があるかどうか疑問に思っています。ifとelse文を実行するRails
def confirm
if User.find_by_token(params[:token]).nil?
redirect_to root_path
else
@user = User.find_by_token(params[:token])
cookies[:auth_token] = @user.auth_token
User.skip_callbacks = true
@user.update_attribute(:token, "")
@user.update_attribute(:confirmed, 1)
User.skip_callbacks = false
reset_session
redirect_to routes_path
end
end
これはほとんど起こりそうにないようです。私は条件付きの各ブランチにいくつかの出力を追加することをお勧めします。その結果、どちらが実行されるのかがわかります。 – MrTheWalrus
はこのcut'n'pastedコードですか、それとも再入力しましたか? (私はちょうどあなたがタイプし直している場合はここにない実際のコードに入力ミスがあるのだろうかと思っています...) – Pavling
合意 - このコードは期待通りに動作するはずです。実際のコードが微妙に異なる場合、 'redirect_to'を呼び出すことはアクションの実行を止めない*ことに注意してください。 – Thilo