simple_from_for с десятичной точностью не сохраняет десятичные дроби - PullRequest
0 голосов
/ 15 мая 2019

Я использую simple_form_for для моего шаблона формы, который не хранит десятичные числа в моей таблице базы данных.Когда я отправляю форму, она отбрасывает точность.

Вот что у меня есть:

моя схема.rb

create_table "coupons", force: true do |t|
    t.decimal  "amount", precision: 10, scale: 0
end

new.html.slim

.panel-body.padded
        = simple_form_for @coupon, :url => admin_coupons_path  do |f|
          .form-group
            = f.input :amount, as: :string, input_html: { value: number_with_precision(f.object.amount, precision: 8) }, required: true

образ базы данных

enter image description here

В замешательствечто еще я могу сделать, чтобы сделать эту работу.Любая помощь будет оценена.

1 Ответ

0 голосов
/ 15 мая 2019

Недостающим элементом головоломки является точность десятичного знака в базе данных. По умолчанию код выше создаст десятичное поле в MySQL с 10 цифрами, все из которых находятся слева от десятичной точки. Другими словами, сохранение 15.37 в вашей модели покажет 15.37 в приложении, но когда вы сохраните его, оно станет 15 как в хранилище данных, так и при его перезагрузке.

Способ обойти это - указать точность и масштаб вашей миграции. Так что исправьте это с помощью последующей миграции:

change_column :table_name_in_plural, :column_name, :decimal, :precision => 10, :scale => 2

В этом случае мы установили общее количество цифр (точность) равным 10, с двумя десятичными знаками (шкала). Обратите внимание, что вы можете выбирать свои размеры в соответствии со своими потребностями - документы MySQL дают некоторые рекомендации для требования к хранению для различных комбинаций.

Кроме того, при выборе вашей точности и масштаба, имейте в виду, что масштаб (макс. Десятичные разряды) не может быть больше точности (общее количество цифр). Это может показаться очевидным при написании здесь, но без этих переводов в скобках, легко стать ленивым и сделать два значения одинаковыми, что оставит вас с числом, которое должно быть меньше 1,0, так как все пространство будет выделено справа от десятичного знака.

Ссылка: Здесь

...