Cała oryginalna treść jest tworzona po ukraińsku. Nie wszystkie treści zostały jeszcze przetłumaczone. Niektóre posty mogą być dostępne tylko po ukraińsku.Dowiedz się więcej

Co oznacza błąd 'is out of range' w Ruby on Rails? Błąd zakresu - Liczba całkowita z limitem 4 bajtów

Okładka posta: Co oznacza błąd 'is out of range' w Ruby on Rails? Błąd zakresu - Liczba całkowita z limitem 4 bajtów
Ta treść została automatycznie przetłumaczona z ukraińskiego.
Błąd RangeError można zobaczyć w Ruby on Rails po próbie zapisania zbyt dużej (lub zbyt małej) liczby do bazy danych. Błąd może wyglądać tak:
999999999999999999999999999999999999999 jest poza zakresem dla ActiveModel::Type::Integer z limitem 4 bajtów
lub 
999999999999999999999999999999999999999 jest poza zakresem dla ActiveRecord::Type::Integer z limitem 4
Oznacza to, że próbujemy włożyć do bazy coś poza dozwolonym zakresem.
Dla liczb w bazie danych możemy używać typów danych int oraz bigint. I każdy z tych typów ma swoje ograniczenia. O tym już pisałem w poście o różnicy między int a bigint.
Powtórzę to tutaj:
  • Int może mieć wartości między -2147483648 a 2147483647.
  • Bigint między -9223372036854775808 a 9223372036854775807.
To znaczy, że to stałe limity architektury int (liczba 32-bitowa) oraz bigint (liczba 64-bitowa).
Błąd można rozwiązać, używając liczb w tych zakresach. Czasami ten błąd pojawia się podczas testowania wejść na froncie. QA wpisuje dużą liczbę w pole i otrzymujemy RangeError. Zwykle naprawia się to poprzez dodanie walidacji i limitów (zarówno po stronie frontu, jak i backendu).
A co zrobić, jeśli to id modelu i potrzebujemy większego zakresu możliwych wartości? Opcji jest tak naprawdę kilka.
  • Przejście od ID do UUID (Uniwersalny Unikalny Identyfikator). Wariantów realizacji może być naprawdę wiele. I zależy to od stosu i skopów.
  • Podział bazy danych na klastry. Tutaj też wariantów realizacji jest dość dużo. Ale umownie - każdy klaster (shard) będzie miał prefiks i swój zakres bigint.
  • W dużych systemach można zobaczyć klucze kompozytowe, które są tworzone z kilku różnych kolumn. Ale to również specyficzna opcja, której realizacja zależy od wielu czynników.

Ten post nie ma jeszcze żadnych dodatków od autora.

Jaka jest różnica między wartością bezpośrednią a referencją w Ruby?
29 maj 12:00

Jaka jest różnica między wartością bezpośrednią a referencją w Ruby?

meme code
meme code@memecode
Dlaczego kod Ruby zwraca nil po wykonaniu puts?
29 maj 20:30

Dlaczego kod Ruby zwraca nil po wykonaniu puts?

meme code
meme code@memecode
Jaka jest różnica między nil a false w Ruby?
29 maj 20:59

Jaka jest różnica między nil a false w Ruby?

meme code
meme code@memecode
Dlaczego pusty ciąg (string) w Ruby nie jest fałszem?
31 maj 14:39

Dlaczego pusty ciąg (string) w Ruby nie jest fałszem?

meme code
meme code@memecode
Zakres widoczności zmiennej lokalnej w Ruby
3 cze 16:46

Zakres widoczności zmiennej lokalnej w Ruby

meme code
meme code@memecode
Czym różni się int od bigint w Ruby? Minimalne i maksymalne wartości.
13 cze 06:37

Czym różni się int od bigint w Ruby? Minimalne i maksymalne wartości.

meme code
meme code@memecode
Czym jest niemutowalność i mutowalność?
19 cze 07:48

Czym jest niemutowalność i mutowalność?

meme code
meme code@memecode
[Ruby] Co zwróci wynik dodawania 10.5 i 10?
23 cze 13:23

[Ruby] Co zwróci wynik dodawania 10.5 i 10?

meme code
meme code@memecode
[Ruby] Czym różnią się zmienne zaczynające się od @, @@ i $?
23 cze 14:00

[Ruby] Czym różnią się zmienne zaczynające się od @, @@ i $?

meme code
meme code@memecode
Co to jest funkcja w programowaniu?
24 cze 18:15

Co to jest funkcja w programowaniu?

meme code
meme code@memecode
[Fix] extconf.rb nie powiódł się podczas instalacji biblioteki Ruby Gosu
27 cze 16:38

[Fix] extconf.rb nie powiódł się podczas instalacji biblioteki Ruby Gosu

meme code
meme code@memecode
Jak zrobić pusty commit w gicie?
28 cze 08:33

Jak zrobić pusty commit w gicie?

meme code
meme code@memecode