From 97a4db91d69d1795fe9079027968f0c0453bd0a1 Mon Sep 17 00:00:00 2001 From: Andrew White Date: Tue, 22 Jan 2013 14:24:42 +0000 Subject: Revert "Merge pull request #6986 from kennyj/fix_6975" This reverts commit 8905c1fb496641c3cdb7b3b816ae6d3d4b2c2b73. Closes #8460 Conflicts: activerecord/test/cases/dirty_test.rb --- activerecord/CHANGELOG.md | 5 +++++ .../attribute_methods/time_zone_conversion.rb | 19 +++++-------------- activerecord/test/cases/dirty_test.rb | 15 --------------- 3 files changed, 10 insertions(+), 29 deletions(-) (limited to 'activerecord') diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index 291e3539c4..d0b67f2e44 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -1,5 +1,10 @@ ## Rails 3.2.12 (unreleased) ## +* Revert round usec when comparing timestamp attributes in the dirty tracking. + Fixes #8460. + + *Andrew White* + * Revert creation of through association models when using `collection=[]` on a `has_many :through` association from an unsaved model. Fix #7661, #8269. diff --git a/activerecord/lib/active_record/attribute_methods/time_zone_conversion.rb b/activerecord/lib/active_record/attribute_methods/time_zone_conversion.rb index 39d81cf6ef..45810322de 100644 --- a/activerecord/lib/active_record/attribute_methods/time_zone_conversion.rb +++ b/activerecord/lib/active_record/attribute_methods/time_zone_conversion.rb @@ -42,14 +42,11 @@ module ActiveRecord unless time.acts_like?(:time) time = time.is_a?(String) ? Time.zone.parse(time) : time.to_time rescue time end - zoned_time = time && time.in_time_zone rescue nil - rounded_time = round_usec(zoned_time) - rounded_value = round_usec(read_attribute("#{attr_name}")) - if (rounded_value != rounded_time) || (!rounded_value && original_time) - write_attribute("#{attr_name}", original_time) - #{attr_name}_will_change! - @attributes_cache["#{attr_name}"] = zoned_time - end + time = time.in_time_zone rescue nil if time + changed = read_attribute(:#{attr_name}) != time + write_attribute(:#{attr_name}, original_time) + #{attr_name}_will_change! if changed + @attributes_cache["#{attr_name}"] = time end EOV generated_attribute_methods.module_eval(method_body, __FILE__, line) @@ -63,12 +60,6 @@ module ActiveRecord time_zone_aware_attributes && !self.skip_time_zone_conversion_for_attributes.include?(name.to_sym) && column.type.in?([:datetime, :timestamp]) end end - - private - def round_usec(value) - return unless value - value.change(:usec => 0) - end end end end diff --git a/activerecord/test/cases/dirty_test.rb b/activerecord/test/cases/dirty_test.rb index a82ec6d3cd..b4e43bdfbc 100644 --- a/activerecord/test/cases/dirty_test.rb +++ b/activerecord/test/cases/dirty_test.rb @@ -563,21 +563,6 @@ class DirtyTest < ActiveRecord::TestCase end end - def test_setting_time_attributes_with_time_zone_field_to_same_time_should_not_be_marked_as_a_change - in_time_zone 'Paris' do - target = Class.new(ActiveRecord::Base) - target.table_name = 'pirates' - - created_on = Time.now - - pirate = target.create(:created_on => created_on) - pirate.reload # Here mysql truncate the usec value to 0 - - pirate.created_on = created_on - assert !pirate.created_on_changed? - end - end - private def with_partial_updates(klass, on = true) old = klass.partial_updates? -- cgit v1.2.3