ГоловнаВсі публікаціїКатегоріїПро проєкт

Що означає помилка 'is out of range' в Ruby on Rails? Range Error - Integer with limit 4 bytes

Обкладинка нотатки: Що означає помилка 'is out of range' в Ruby on Rails? Range Error - Integer with limit 4 bytes
RangeError помилку можна побачити у Ruby on Rails після спроби запису занадто великого (або малого) числа до бази даних. Помилка може виглядати ось так:
999999999999999999999999999999999999999 is out of range for ActiveModel::Type::Integer with limit 4 bytes
або 
999999999999999999999999999999999999999 is out of range for ActiveRecord::Type::Integer with limit 4
Це означає, що ми намагаємось запхати у базу щось поза дозволеного діапазону.
Для чисел в базі даних ми можемо використовувати типи даних int та bigint. І кожен з цих типів має свої обмеження. Про це я вже писав в дописі про різницю між int та bigint.
Продублюю і тут:
  • Int може мати значення між -2147483648 та 2147483647.
  • Bigint між -9223372036854775808 та 9223372036854775807.
Тобто це фіксовані архітектурою ліміти int (32-бітове число) та bigint (64-бітове число).
Помилку можна вирішити використовуючи числа в цих діапазонах. Іноді ця помилка виникає при тестуванні інпутів на фронтенді. QA вписує велике число в поле і ми отримуємо RangeError. Це зазвичай фікситься додаванням валідацій та лімітів (як на стороні fe так і на be).
А щож робити якщо це id моделі і нам потрібно більший діапазон можливих значень? Варіантів насправді декілька.
  • Перехід від ID до UUID (Universally Unique Identifier). Варіацій реалізації може бути доволі багато. І залежить від стека і скопупів.
  • Розподіл бази даних на кластери. Тут теж варіацій реалізацій доволі багато. Але умовно - кожен кластер (shard) буде мати префікс та свій діапазон bigint.
  • В великих системах можна побачити композиційні ключі, які створюються з декількох різних колонок. Але це також специфічний варіант, реалізація якого залежить від багатьох факторів.
В чому різниця між immediate value та reference у Ruby?
29.05.2024 12:00

В чому різниця між immediate value та reference у Ruby?

meme code
meme code@memecode
Чому Ruby код повертає nil після виконання puts?
29.05.2024 20:30

Чому Ruby код повертає nil після виконання puts?

meme code
meme code@memecode
Яка різниця між nil і false в Ruby?
29.05.2024 20:59

Яка різниця між nil і false в Ruby?

meme code
meme code@memecode
Чому порожній рядок (string) у Ruby не є false?
31.05.2024 14:39

Чому порожній рядок (string) у Ruby не є false?

meme code
meme code@memecode
Область видимості локальної змінної в Ruby
03.06.2024 16:46

Область видимості локальної змінної в Ruby

meme code
meme code@memecode
Чим відрізняється int та bigint в Ruby? Мінімальні та максимальні значення.
13.06.2024 06:37

Чим відрізняється int та bigint в Ruby? Мінімальні та максимальні значення.

meme code
meme code@memecode
Що таке імутабільність та мутабільність?
19.06.2024 07:48

Що таке імутабільність та мутабільність?

meme code
meme code@memecode
[Ruby] Що повернеться в результаті складання 10.5 та 10?
23.06.2024 13:23

[Ruby] Що повернеться в результаті складання 10.5 та 10?

meme code
meme code@memecode
[Ruby] Чим відрізняються змінні, що починаються з @, @@ та $?
23.06.2024 14:00

[Ruby] Чим відрізняються змінні, що починаються з @, @@ та $?

meme code
meme code@memecode
Що таке функція в програмуванні?
24.06.2024 18:15

Що таке функція в програмуванні?

meme code
meme code@memecode
[Фікс] extconf.rb failed під час встановлення Ruby-бібліотеки Gosu
27.06.2024 16:38

[Фікс] extconf.rb failed під час встановлення Ruby-бібліотеки Gosu

meme code
meme code@memecode
Як зробити пустий git commit?
28.06.2024 08:33

Як зробити пустий git commit?

meme code
meme code@memecode