我有一个列amount
的模型,这是数据库中的小数。我想确保在实例化该模型时只给出具有一定精度的BigDecimal
。当提供Float
时,我已经编写了测试场景的规范,然后我有一个before_create
回调,如果它不是BigDecimal
,则会引发错误。
然而,当值到达before_create
回调时,Rails已经将其转换为BigDecimal
。我想这很好,而且我可能仍然可以检查精度,但是由于我不知道rails是如何进行转换的,因此在链的更上层检查正确的参数类型和精度会更好。
有什么办法可以做到吗?
From http://api.rubyonrails.org/classes/ActiveRecord/Base.html
有时,您希望能够读取原始属性数据,而不需要先运行列确定的类型转换。这可以通过使用所有属性都具有的_before_type_cast访问器来实现。例如,如果Account模型有一个balance属性,则可以调用Account。Balance_before_type_cast或account.id_before_type_cast
尝试覆盖amount=
def amount=(val)
# checking / conversion goes here, new_val as result
self[:amount] = new_val # don't use self.amount = new_val to avoid endless loop
end