diff --git a/lib/aasm/base.rb b/lib/aasm/base.rb index d660c30d..5e870cfc 100644 --- a/lib/aasm/base.rb +++ b/lib/aasm/base.rb @@ -268,7 +268,7 @@ def setup_timestamps(aasm_name) after_all_transitions do if self.class.aasm(:"#{aasm_name}").state_machine.config.timestamps - ts_setter = "#{aasm.to_state}_at=" + ts_setter = "#{aasm(aasm_name).to_state}_at=" respond_to?(ts_setter) && send(ts_setter, ::Time.now) end end diff --git a/spec/models/timestamps_with_named_machine_example.rb b/spec/models/timestamps_with_named_machine_example.rb new file mode 100644 index 00000000..0ebbbf7e --- /dev/null +++ b/spec/models/timestamps_with_named_machine_example.rb @@ -0,0 +1,13 @@ +class TimestampsWithNamedMachineExample + include AASM + + attr_accessor :opened_at + + aasm :my_state, timestamps: true do + state :opened + + event :open do + transitions to: :opened + end + end +end diff --git a/spec/unit/timestamps_spec.rb b/spec/unit/timestamps_spec.rb index 1912589f..0c36ec48 100644 --- a/spec/unit/timestamps_spec.rb +++ b/spec/unit/timestamps_spec.rb @@ -24,4 +24,9 @@ object.class.aasm.state_machine.config.timestamps = true expect { object.open }.to change { object.opened_at } end + + it 'calls a timestamp setter when using a named state machine' do + object = TimestampsWithNamedMachineExample.new + expect { object.open }.to change { object.opened_at }.from(nil).to(instance_of(::Time)) + end end