今日は再度確認したところ、以下のことが分かりました:
[25] pry(main)> how.totp_enabled?
=> false
[26] pry(main)> how.backup_codes_enabled?
=> true
[27] pry(main)> how.totp_or_backup_codes_enabled?
=> true
そのため、@falco さんの上記の回答に従って、バックアップコードも削除してみました:
UserSecondFactor.backup_codes.where(user_id: id).each(&:destroy!)
ここで、ログイン手段を失ったユーザーの OTP を無効化するための完全な解決策を紹介します:totps エントリと backup_codes の両方を削除する必要があります。そうすることで、#totp_or_backup_codes_enabled? の呼び出しが false を返すようになります。