Alle Originalinhalte werden auf Ukrainisch erstellt. Noch nicht alle Inhalte wurden übersetzt. Einige Beiträge sind möglicherweise nur auf Ukrainisch verfügbar.Mehr erfahren

Was bedeutet der Fehler 'is out of range' in Ruby on Rails? Bereichsfehler - Ganzzahl mit einer Begrenzung von 4 Bytes

Beitrags-Cover: Was bedeutet der Fehler 'is out of range' in Ruby on Rails? Bereichsfehler - Ganzzahl mit einer Begrenzung von 4 Bytes
Dieser Inhalt wurde automatisch aus dem Ukrainischen übersetzt.
Der RangeError kann in Ruby on Rails auftreten, nachdem versucht wurde, eine zu große (oder zu kleine) Zahl in die Datenbank zu schreiben. Der Fehler kann so aussehen:
999999999999999999999999999999999999999 ist außerhalb des Bereichs für ActiveModel::Type::Integer mit einem Limit von 4 Bytes
oder 
999999999999999999999999999999999999999 ist außerhalb des Bereichs für ActiveRecord::Type::Integer mit einem Limit von 4
Das bedeutet, dass wir versuchen, etwas außerhalb des erlaubten Bereichs in die Datenbank zu stecken.
Für Zahlen in der Datenbank können wir die Datentypen int und bigint verwenden. Und jeder dieser Typen hat seine eigenen Einschränkungen. Darüber habe ich bereits in meinem Beitrag über den Unterschied zwischen int und bigint geschrieben.
Ich wiederhole es hier:
  • Int kann Werte zwischen -2147483648 und 2147483647 haben.
  • Bigint zwischen -9223372036854775808 und 9223372036854775807.
Das sind also die architekturbedingt festen Limits für int (32-Bit-Zahl) und bigint (64-Bit-Zahl).
Der Fehler kann behoben werden, indem Zahlen in diesen Bereichen verwendet werden. Manchmal tritt dieser Fehler beim Testen von Eingaben im Frontend auf. QA gibt eine große Zahl in das Feld ein und wir erhalten einen RangeError. Dies wird normalerweise durch das Hinzufügen von Validierungen und Limits (sowohl auf der Frontend- als auch auf der Backend-Seite) behoben.
Was ist jedoch zu tun, wenn es sich um die ID eines Modells handelt und wir einen größeren Bereich möglicher Werte benötigen? Es gibt tatsächlich mehrere Optionen.
  • Der Übergang von ID zu UUID (Universally Unique Identifier). Es gibt viele Variationen der Implementierung, die von dem Stack und den Anforderungen abhängen.
  • Die Aufteilung der Datenbank in Cluster. Auch hier gibt es viele Variationen der Implementierung. Aber grob gesagt wird jeder Cluster (Shard) ein Präfix und seinen eigenen Bereich von bigint haben.
  • In großen Systemen kann man zusammengesetzte Schlüssel sehen, die aus mehreren verschiedenen Spalten erstellt werden. Aber das ist auch eine spezifische Variante, deren Implementierung von vielen Faktoren abhängt.

Dieser Beitrag hat noch keine Ergänzungen vom Autor.

Was ist der Unterschied zwischen immediate value und reference in Ruby?
29. Mai, 12:00 Uhr

Was ist der Unterschied zwischen immediate value und reference in Ruby?

meme code
meme code@memecode
Warum gibt der Ruby-Code nil zurück, nachdem puts ausgeführt wurde?
29. Mai, 20:30 Uhr

Warum gibt der Ruby-Code nil zurück, nachdem puts ausgeführt wurde?

meme code
meme code@memecode
Was ist der Unterschied zwischen nil und false in Ruby?
29. Mai, 20:59 Uhr

Was ist der Unterschied zwischen nil und false in Ruby?

meme code
meme code@memecode
Warum ist eine leere Zeichenkette (string) in Ruby nicht false?
31. Mai, 14:39 Uhr

Warum ist eine leere Zeichenkette (string) in Ruby nicht false?

meme code
meme code@memecode
Sichtbarkeit des lokalen Variablenbereichs in Ruby
03. Jun, 16:46 Uhr

Sichtbarkeit des lokalen Variablenbereichs in Ruby

meme code
meme code@memecode
Was ist der Unterschied zwischen int und bigint in Ruby? Minimale und maximale Werte.
13. Jun, 06:37 Uhr

Was ist der Unterschied zwischen int und bigint in Ruby? Minimale und maximale Werte.

meme code
meme code@memecode
Was sind Immutabilität und Mutabilität?
19. Jun, 07:48 Uhr

Was sind Immutabilität und Mutabilität?

meme code
meme code@memecode
[Ruby] Was ergibt die Addition von 10,5 und 10?
23. Jun, 13:23 Uhr

[Ruby] Was ergibt die Addition von 10,5 und 10?

meme code
meme code@memecode
[Ruby] Was unterscheidet Variablen, die mit @, @@ und $ beginnen?
23. Jun, 14:00 Uhr

[Ruby] Was unterscheidet Variablen, die mit @, @@ und $ beginnen?

meme code
meme code@memecode
Was ist eine Funktion in der Programmierung?
24. Jun, 18:15 Uhr

Was ist eine Funktion in der Programmierung?

meme code
meme code@memecode
[Fix] extconf.rb ist bei der Installation der Ruby-Bibliothek Gosu fehlgeschlagen
27. Jun, 16:38 Uhr

[Fix] extconf.rb ist bei der Installation der Ruby-Bibliothek Gosu fehlgeschlagen

meme code
meme code@memecode
Wie macht man einen leeren Git-Commit?
28. Jun, 08:33 Uhr

Wie macht man einen leeren Git-Commit?

meme code
meme code@memecode