Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Merge pull request #8311 from alisdair/dirty-nullable-datetime

Don't call will_change! for datetime nil->"".

Setting a nil datetime attribute to a blank string should not cause the
attribute to be dirty.

Conflicts:
	activerecord/CHANGELOG.md
	activerecord/lib/active_record/attribute_methods/time_zone_conversion.rb
  • Loading branch information...
commit 6fe1a4a2da5440aee91c4de387ffdf71b0b83a0e 1 parent 83e7105
@carlosantoniodasilva carlosantoniodasilva authored
View
6 activerecord/CHANGELOG.md
@@ -1,5 +1,11 @@
## Rails 3.2.10 (unreleased)
+* Fix dirty attribute checks for TimeZoneConversion with nil and blank
+ datetime attributes. Setting a nil datetime to a blank string should not
+ result in a change being flagged. Fix #8310 [Backport #8311]
+
+ *Alisdair McDiarmid*
+
* Prevent mass assignment to the type column of polymorphic associations when using `build` [Backport #8291]
Fix #8265
View
1  activerecord/lib/active_record/attribute_methods/time_zone_conversion.rb
@@ -37,6 +37,7 @@ def define_method_attribute=(attr_name)
if create_time_zone_conversion_attribute?(attr_name, columns_hash[attr_name])
method_body, line = <<-EOV, __LINE__ + 1
def #{attr_name}=(original_time)
+ original_time = nil if original_time.blank?
time = original_time
unless time.acts_like?(:time)
time = time.is_a?(String) ? Time.zone.parse(time) : time.to_time rescue time
View
14 activerecord/test/cases/dirty_test.rb
@@ -201,6 +201,20 @@ def test_nullable_float_not_marked_as_changed_if_new_value_is_blank
end
end
+ def test_nullable_datetime_not_marked_as_changed_if_new_value_is_blank
+ in_time_zone 'Edinburgh' do
+ target = Class.new(ActiveRecord::Base)
+ target.table_name = 'topics'
+
+ topic = target.create
+ assert_equal nil, topic.written_on
+
+ topic.written_on = ""
+ assert_equal nil, topic.written_on
+ assert !topic.written_on_changed?
+ end
+ end
+
def test_integer_zero_to_string_zero_not_marked_as_changed
pirate = Pirate.new
pirate.parrot_id = 0
Please sign in to comment.
Something went wrong with that request. Please try again.