アプリケーションで電子メール検証プロセスを設定しようとしていますが、トークンを正常に生成し、ユーザーがサインアップしたときに電子メールを送信します。しかし、検証リンクをクリックすると、「users_controller/confirm」アクションのifステートメントとelseステートメントの両方が実行されます。root_pathにリダイレクトされますが、ユーザーレコードの2つのフィールドが変更されています。Railsコンソールからfind_by_tokenを実行すると、期待されるユーザーが返されます。私はmysqlを使用していますが、クエリに何らかの遅延があり、両方が実行されるのではないかと考えています。
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