diff options
| author | Sean Griffin <sean@thoughtbot.com> | 2014-12-23 09:38:48 -0700 | 
|---|---|---|
| committer | Sean Griffin <sean@thoughtbot.com> | 2014-12-23 09:40:01 -0700 | 
| commit | e35221cfd948098c6fabdff5fed3877edb8921d3 (patch) | |
| tree | a929aae400a645ed8bb94e2bfd00d5493f33c326 | |
| parent | d26704a15f88d384dd282425daa832affdb5f8c1 (diff) | |
| download | rails-e35221cfd948098c6fabdff5fed3877edb8921d3.tar.gz rails-e35221cfd948098c6fabdff5fed3877edb8921d3.tar.bz2 rails-e35221cfd948098c6fabdff5fed3877edb8921d3.zip | |
Don't treat `nil` as changed in serialized types
We were ignoring the `default_value?` escape clause in the serialized
type, which caused the default value to always be treated as changed.
Fixes #18169
| -rw-r--r-- | activerecord/lib/active_record/type/serialized.rb | 2 | ||||
| -rw-r--r-- | activerecord/test/cases/serialized_attribute_test.rb | 8 | 
2 files changed, 9 insertions, 1 deletions
| diff --git a/activerecord/lib/active_record/type/serialized.rb b/activerecord/lib/active_record/type/serialized.rb index 3191a868ef..3cac03464e 100644 --- a/activerecord/lib/active_record/type/serialized.rb +++ b/activerecord/lib/active_record/type/serialized.rb @@ -29,7 +29,7 @@ module ActiveRecord        def changed_in_place?(raw_old_value, value)          return false if value.nil? -        subtype.changed_in_place?(raw_old_value, coder.dump(value)) +        subtype.changed_in_place?(raw_old_value, type_cast_for_database(value))        end        def accessor diff --git a/activerecord/test/cases/serialized_attribute_test.rb b/activerecord/test/cases/serialized_attribute_test.rb index 56a0e92e1d..c8441201ca 100644 --- a/activerecord/test/cases/serialized_attribute_test.rb +++ b/activerecord/test/cases/serialized_attribute_test.rb @@ -256,4 +256,12 @@ class SerializedAttributeTest < ActiveRecord::TestCase      assert_equal("second", t.content)      assert_equal("second", t.reload.content)    end + +  def test_nil_is_not_changed_when_serialized_with_a_class +    Topic.serialize(:content, Array) + +    topic = Topic.new(content: nil) + +    assert_not topic.content_changed? +  end  end | 
