eu criei um arquivo em config/initializers, chamado activerecorde_core_ext.rb e coloquei o seguinte:
module ActiveRecord
class Base
def self.decimal_attribute(*methods)
separator = I18n.t(:'number.format.separator')
delimiter = I18n.t(:'number.format.delimiter')
methods.each do |method|
define_method(:"#{method}=") do |value|
if value.to_s =~ %r(\A\d{1,3}(#{"\\#{delimiter}"}?\d{3})*#{"\\#{separator}"}\d+\z)
value = BigDecimal.new value.to_s.gsub(delimiter, '').gsub(separator, '.')
end
super(value)
end
end
end
def previous_attribute_changes?(attribute)
previous_changes.fetch(attribute.to_s, []).second.present?
end
end
end
nos meus models que usão valores decimais, não só valores de moeda.
em meus models uso o seguinte:
class Plan < ActiveRecord::Base
has_paper_trail
decimal_attribute :value, :activation_value, :board, :direct_indication
decimal_attribute :residual_value, :value_profitability
...
end