处理作为整数Rails输入的小数

时间:2017-07-31 19:06:12

标签: ruby-on-rails bigdecimal

我对rails非常陌生并遇到一个我确定不是独一无二的问题,但似乎无法找到一个优雅的解决方案:

我有一个带有:tax_rate十进制属性的模型,用于稍后在模型中使用一些乘法创建总计。

如果用户在税率字段中输入税率为“0.09”,则此功能正常,但是当用户输入“9”时,显然会产生大量的错误。

我想创建一些代码来处理输入表单的整数。

我的表格:

  <td><%= f.input :tax_rate, label: false, input_html: { class: 'taxtarget', precision: 2 }%></td>

模型中的计算:

before_save :persist_calculations

validates_presence_of :price, :units

def calculated_total
    price * units + calculated_tax
end

def calculated_tax
    if self.tax_rate.present?
        self.price * self.tax_rate
    else
        self.price
    end
end

def persist_calculations
    self.total = calculated_total
    self.tax_amount = calculated_tax
end

我想通过阻止整数(需要小数点)或通过向其添加两个小数位将整数转换为小数来处理整数。

任何人都有任何关于如何实现这一目标的良好资源或想法?

1 个答案:

答案 0 :(得分:0)

为tax_rate的模型添加验证,使其不能大于1.0:

validates :tax_rate, less_than: 1.0

和/或在模型中添加before_validation,将大数字转换为小数字:

before_validation ->(obj) {
  obj.tax_rate = obj.tax_rate / 100 if obj.tax_rate > 1
}

和/或处理它的控制器,这通常比使用回调更好。