diff --git a/lib/money-rails/active_record/monetizable.rb b/lib/money-rails/active_record/monetizable.rb index 4b6b5febf..aeb85e2e5 100644 --- a/lib/money-rails/active_record/monetizable.rb +++ b/lib/money-rails/active_record/monetizable.rb @@ -205,7 +205,7 @@ def read_monetized(name, subunit_name, options = nil, *args, **kwargs) result = memoized else memoized_amount = memoized.amount.to_money(attr_currency) - write_attribute subunit_name, memoized_amount.cents + write_attribute subunit_name, memoized_amount.cents if has_attribute? subunit_name # Cache the value (it may be nil) result = instance_variable_set("@#{name}", memoized_amount) end diff --git a/spec/active_record/monetizable_spec.rb b/spec/active_record/monetizable_spec.rb index 85dd378fb..7ab6ed252 100644 --- a/spec/active_record/monetizable_spec.rb +++ b/spec/active_record/monetizable_spec.rb @@ -105,6 +105,14 @@ def assert_monetized_attributes(monetized_attributes, expected_attributes) expect(transaction.amount_cents).to eq(20000) end + it "update to instance currency field gets applied to converted methods" do + transaction = Transaction.create(amount: '200', tax: '10', currency: 'USD') + expect(transaction.total).to eq(Money.new(21000, 'USD')) + + transaction.currency = 'CLP' + expect(transaction.total).to eq(Money.new(210, 'CLP')) + end + it "raises an error if trying to create two attributes with the same name" do expect do class Product