Как я могу дать проверку на десятичном поле в Rails? - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть Order модель с десятичным числом :total. Я хочу подтвердить, что эта сумма составляет два десятичных знака, больше 0 и меньше миллиона.

validates :total, presence: true, format: { with: /\A\d+(?:\.\d{0,2})?\z/ }, numericality: { greater_than: 0, less_than: 100_000_000 }

Когда мой итог становится 1234567890.00, возникает ошибка:

PG :: NumericValueOutOfRange: ОШИБКА: переполнение числового поля ДЕТАЛИ: Поле с точностью 11, шкала 2 должно округляться до абсолютного значения менее 10 ^ 9. : UPDATE "заказы" SET "tax_total" = $ 1, "total" = $ 2, "updated_at" = $ 3 ГДЕ "orders". "Id" = $ 4

Я также пытался добавить эту миграцию:

def self.up
  change_column :orders, :total, :decimal, :precision => 11, :scale =>2
end

в моей модели, но ошибка все еще там.

Я хочу получить подтверждение здесь .

1 Ответ

0 голосов
/ 02 ноября 2018

Для 1234567890.00 ваша миграция должна быть

def self.up
    change_column :orders, :total, :decimal, :precision => 12, :scale =>2
end

Для проверки числового значения используйте следующее на уровне рельсов:

validates_numericality_of :decimal, less_than_or_equal_to: BigDecimal(10**8)

Помните, точность - это общее число - (мантисса + характеристика) Для вашего случая 1234567890 добавьте до 10. Добавьте 2 к десятичному числу, и вот так ваша точность должна быть 12, а не 11.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...