Skip to content
  • Lilibeth De La Cruz's avatar
    3c5f631c
    Fix handling of dirty time zone aware attributes · 3c5f631c
    Lilibeth De La Cruz authored
    Previously, when `time_zone_aware_attributes` were enabled, after
    changing a datetime or timestamp attribute and then changing it back
    to the original value, `changed_attributes` still tracked the
    attribute as changed. This caused `[attribute]_changed?` and
    `changed?` methods to return true incorrectly.
    
    Example:
    
        in_time_zone 'Paris' do
          order = Order.new
          original_time = Time.local(2012, 10, 10)
          order.shipped_at = original_time
          order.save
          order.changed? # => false
    
          # changing value
          order.shipped_at = Time.local(2013, 1, 1)
          order.changed? # => true
    
          # reverting to original value
          order.shipped_at = original_time
          order.changed? # => false, used to return true
        end
    
    (cherry picked from commit bc982cbc)
    
    Conflicts:
    	activerecord/CHANGELOG.md
    	activerecord/lib/active_record/attribute_methods/time_zone_conversion.rb
    
    Backport of #9073
    Fixes #8898
    3c5f631c
    Fix handling of dirty time zone aware attributes
    Lilibeth De La Cruz authored
    Previously, when `time_zone_aware_attributes` were enabled, after
    changing a datetime or timestamp attribute and then changing it back
    to the original value, `changed_attributes` still tracked the
    attribute as changed. This caused `[attribute]_changed?` and
    `changed?` methods to return true incorrectly.
    
    Example:
    
        in_time_zone 'Paris' do
          order = Order.new
          original_time = Time.local(2012, 10, 10)
          order.shipped_at = original_time
          order.save
          order.changed? # => false
    
          # changing value
          order.shipped_at = Time.local(2013, 1, 1)
          order.changed? # => true
    
          # reverting to original value
          order.shipped_at = original_time
          order.changed? # => false, used to return true
        end
    
    (cherry picked from commit bc982cbc)
    
    Conflicts:
    	activerecord/CHANGELOG.md
    	activerecord/lib/active_record/attribute_methods/time_zone_conversion.rb
    
    Backport of #9073
    Fixes #8898
Loading