← головнаПрограмування

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

Що означає помилка 'is out of range' в Ruby on Rails? Range Error. ActiveModel::Type::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.
  • В великих системах можна побачити композиційні ключі, які створюються з декількох різних колонок. Але це також специфічний варіант, реалізація якого залежить від багатьох факторів.

🔥 Більше дописів

Всі публікації
Яка різниця між nil і false в Ruby?
Програмування29 трав. '24, 20:59

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

Яка різниця між nil і false в Ruby? Розглянемо принцип роботи та відмінності значень nil та false...

Як зробити пустий git commit?
Програмування28 черв. '24, 08:33

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

Як зробити пустий git commit? Робимо пустий гіт-коміт. Нащо? Хтозна, у кожного свої цілі. В моєму...