* UPDATE: this is now fixed in 4.2.stable and 4.2.1 *
in Rails 4.2.0 (and current 4.2.stable), the ensure_in_range
method happens before AR validation, yielding a RangeError
if I do something as simple as
@obj.threshold = 10_000_000_000
on a column with a postgres type integer
threshold | integer |
it yields
RangeError: 10000000000 is out of range for ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Integer with limit 4 from .../2.0.0-p598/lib/ruby/gems/2.0.0/bundler/gems/rails-62e9e61f2d1b/activerecord/lib/active_record/type/integer.rb:41:in `ensure_in_range'
which is true! but tell that to the users. there's an ActiveRecord model validation like
validates :threshold, presence: true,
numericality: { greater_than_or_equal_to: 0, less_than: 1_000_000}
i can't imagine this is expected behavior, anyone have any explanation why this type cast happens before validation?
rails 4.2.1
solves this issue, in4.2.0
I still getRangeError
. – Thorvaldsen