Heute habe ich es erneut geprüft und festgestellt:
[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
Daraufhin habe ich versucht, auch die Backup-Codes zu entfernen, wie in der obigen Antwort von @falco beschrieben:
UserSecondFactor.backup_codes.where(user_id: id).each(&:destroy!)
Hier ist nun die vollständige Lösung, um OTP für einen Benutzer zu deaktivieren, der keinen Zugriff mehr hat: Sie müssen sowohl die totps-Einträge als auch die backup_codes entfernen, damit der Aufruf von #totp_or_backup_codes_enabled? false zurückgibt.