我将simple_form_for
用于表单模板,该模板未将十进制数字存储到数据库表中。当我提交表单时,它会丢弃精度。
这是我所拥有的:
我的schema.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
数据库图片
我对我还能做些什么感到困惑。任何帮助将不胜感激。
答案 0 :(得分:-1)
难题的缺失部分是数据库中小数的精度。默认情况下,上面的代码将在MySQL中创建一个带有10位数字的十进制字段,所有这些数字都位于小数点的左侧。换句话说,将15.37保存到模型将在应用程序中显示15.37,但是当您保存模型时,在数据存储区和重新加载模型时,它将变成15。
解决此问题的方法是在迁移中指定精度和小数位数。因此,请通过后续迁移对其进行纠正:
change_column :table_name_in_plural, :column_name, :decimal, :precision => 10, :scale => 2
在这种情况下,我们将位数(精度)设置为10,小数点后两位(小数位)。请注意,您可以根据需要选择大小-MySQL文档为您提供了一些指导不同组合的存储要求。
此外,在选择精度和小数位数时,请注意小数位数(最大小数位数)不能大于精度(总位数)。在此处编写时似乎很明显,但是括号中没有这些翻译,很容易变得懒惰并使两个值相同,这将使您的数字必须小于1.0,因为所有空间都将分配到小数点右边。
参考:Here