控制ActiveRecord创建参数的类型和特征



我有一个列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

最新更新