1

我有一个模型,其列amount是数据库中的小数。我想确保BigDecimal在实例化此模型时只给出具有一定精度的 a 。我已经编写了规范来测试Float提供 a 时的场景,然后我有一个before_create回调,如果它不是 a 则引发错误BigDecimal

但是,当值到达before_create回调时,Rails 已经将其转换为BigDecimal. 我想这很好,而且我可能仍然可以检查精度,但是由于我不确切知道 rails 是如何进行转换的,因此最好在链上进一步检查正确的参数类型和精度。

有没有办法做到这一点?

4

2 回答 2

1

来自http://api.rubyonrails.org/classes/ActiveRecord/Base.html

有时您希望能够读取原始属性数据,而无需先运行由列确定的类型转换。这可以通过使用所有属性都具有的 _before_type_cast 访问器来完成。例如,如果您的 Account 模型具有 balance 属性,则可以调用 account.balance_before_type_cast 或 account.id_before_type_cast。

于 2013-01-08T19:38:29.967 回答
0

尝试覆盖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
于 2013-01-08T19:38:02.047 回答