diff --git a/lib/state_machines/integrations/active_record.rb b/lib/state_machines/integrations/active_record.rb index de3031a..a8d1ea2 100644 --- a/lib/state_machines/integrations/active_record.rb +++ b/lib/state_machines/integrations/active_record.rb @@ -445,7 +445,8 @@ def define_state_initializer define_helper :instance, <<-end_eval, __FILE__, __LINE__ + 1 def initialize(attributes = nil, *) super(attributes) do |*args| - scoped_attributes = (attributes || {}).merge(self.class.scope_attributes) + attributes = (attributes || {}).transform_keys { |key| self.class.attribute_aliases[key.to_s] || key } + scoped_attributes = attributes.merge(self.class.scope_attributes) self.class.state_machines.initialize_states(self, {}, scoped_attributes) yield(*args) if block_given? diff --git a/test/machine_with_initialized_aliased_attribute_test.rb b/test/machine_with_initialized_aliased_attribute_test.rb new file mode 100644 index 0000000..4c057fa --- /dev/null +++ b/test/machine_with_initialized_aliased_attribute_test.rb @@ -0,0 +1,20 @@ +require_relative 'test_helper' + +class MachineWithInitializedAliasedAttributeTest < BaseTestCase + def setup + @model = new_model do + alias_attribute :custom_status, :state + end + + @machine = StateMachines::Machine.new(@model, :initial => :parked, :attribute => :state) + @machine.state :started + + @record = @model.new(:custom_status => :started) + end + + def test_should_match_original_attribute_value + refute @record.state?(:parked) + assert @record.state?(:started) + end +end +