假设我有以下 DataMapper 模型:
class Payment
include DataMapper::Resource
property :id, Serial
property :amount, Decimal, precision: 8, scale: 2
end
然后我执行以下操作:
p = Payment.new(:amount => 12.3245)
这笔付款将无效(至少在 DataMapper 1.2 中),说明Amount must be a number
.
当然,数量是一个数字(握拳);它的小数位数比酒店接受的要多。如果我这样做p.amount = p.amount.round(2)
,付款将有效。
我可以写一个 setter 来消除这种烦恼:
def amount=(val)
@amount = val.round(2)
end
...但是我很烦恼在不同的模型上编写一堆相同的设置器。
我更愿意在Decimal
系统范围内对所有属性使用相同的、合理的规则来处理这个问题。即,由于您知道自己的比例,因此在保存之前四舍五入到该比例。
这是否可以通过配置选项或初始化程序来处理?