我对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
我想通过阻止整数(需要小数点)或通过向其添加两个小数位将整数转换为小数来处理整数。
任何人都有任何关于如何实现这一目标的良好资源或想法?
答案 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
}
和/或处理它的控制器,这通常比使用回调更好。