* UPDATE: теперь это исправлено в 4.2.stable и 4.2.1 *
в Rails 4.2.0 (и текущий 4.2.stable) метод ensure_in_range
происходит до проверки AR, давая RangeError
если я делаю что-то простое, как
@obj.threshold = 10_000_000_000
в столбце с целым числом типа postgres
threshold | integer |
он дает
RangeError: 10000000000 выходит за пределы диапазона для ActiveRecord:: ConnectionAdapters:: PostgreSQL:: OID:: Целое число с лимитом 4 от... /2.0.0-p598/lib/ruby /gems/2.0.0/bundler/gems/rails-62e9e61f2d1b/activerecord/lib/active_record/type/integer.rb: 41: in `обеспечить_in_range '
что верно! но сообщите об этом пользователям. там валидация модели ActiveRecord, например
validates :threshold, presence: true,
numericality: { greater_than_or_equal_to: 0, less_than: 1_000_000}
Я не могу представить, что это ожидаемое поведение, у любого есть какие-либо объяснения, почему этот тип приведения происходит до проверки?