* update: jest już ustalona w 4.2.stable i 4.2.1 *RangeError do prostego przypisania całkowitą w szynach 4.2.0, które powinny być objęte walidacji
w szynach 4.2.0 (i prądu 4,2 .stable) Sposób ensure_in_range
stanie przed potwierdzeniem Ar, otrzymując RangeError
jeśli czegoś tak prostego jak
@obj.threshold = 10_000_000_000
na kolumnie z Postgresa typ całkowity
threshold | integer |
to daje
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'
co jest prawdą! ale powiedz to użytkownikom. istnieje model walidacji ActiveRecord jak
validates :threshold, presence: true,
numericality: { greater_than_or_equal_to: 0, less_than: 1_000_000}
nie mogę sobie wyobrazić, jest to normalne zachowanie, ktoś ma żadnego wyjaśnienia, dlaczego tego typu cast dzieje się przed potwierdzeniem?
Znam ten sam problem. Nie domyśliłem się, dlaczego tak się dzieje. – Stefan
Problem jest spowodowany przez wbudowany typowanie w ActiveRecord, które jest wywoływane w ustawieniach atrybutów (jak odkryłeś). Nie wiem, jak to zrobić z góry mojej głowy, ale zastanowię się. –
W czasie pisania tego komentarza aktualizacja do 'rails 4.2.1' rozwiązuje ten problem, w' 4.2.0' nadal otrzymuję 'RangeError'. – jmarceli