我的模型有一个小数数量属性.
create_table :foos do |t|
t.decimal :amount
end
class Foo < ApplicationRecord
end
我总是希望金额为负值,所以我添加了一个正常化:
class Foo < ApplicationRecord
normalizes :amount, with: -> amount { - amount.abs }
end
这似乎非常有效.
现在,为了安全起见,我添加了一个验证:
class Foo < ApplicationRecord
normalizes :amount, with: -> amount { - amount.abs }
validates :amount, numericality: {less_than: 0}
end
现在,当我将金额设置为正值时,尽管标准化会将其转换为负值,但验证器似乎认为该值仍然是正值,并添加了验证错误.
foo = Foo.new amount: 4
foo.amount # => -4
foo.valid? # => false
foo.errors # => #<ActiveModel::Error attribute=amount, type=less_than, options={:value=>4, :count=>0}>
根据normalizes
,normalisation happens before validation.
我怎么才能让它工作?