Недостающим элементом головоломки является точность десятичного знака в базе данных. По умолчанию код выше создаст десятичное поле в MySQL с 10 цифрами, все из которых находятся слева от десятичной точки. Другими словами, сохранение 15.37 в вашей модели покажет 15.37 в приложении, но когда вы сохраните его, оно станет 15 как в хранилище данных, так и при его перезагрузке.
Способ обойти это - указать точность и масштаб вашей миграции. Так что исправьте это с помощью последующей миграции:
change_column :table_name_in_plural, :column_name, :decimal, :precision => 10, :scale => 2
В этом случае мы установили общее количество цифр (точность) равным 10, с двумя десятичными знаками (шкала). Обратите внимание, что вы можете выбирать свои размеры в соответствии со своими потребностями - документы MySQL дают некоторые рекомендации для требования к хранению для различных комбинаций.
Кроме того, при выборе вашей точности и масштаба, имейте в виду, что масштаб (макс. Десятичные разряды) не может быть больше точности (общее количество цифр). Это может показаться очевидным при написании здесь, но без этих переводов в скобках, легко стать ленивым и сделать два значения одинаковыми, что оставит вас с числом, которое должно быть меньше 1,0, так как все пространство будет выделено справа от десятичного знака.
Ссылка: Здесь