aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test/cases/serialized_attribute_test.rb
diff options
context:
space:
mode:
authorSean Griffin <sean@thoughtbot.com>2014-12-16 15:19:47 -0700
committerSean Griffin <sean@thoughtbot.com>2014-12-16 15:23:05 -0700
commitdd8b5fb9d30f355d4eab6376b8d9e025e90b14d3 (patch)
tree887b7851abeb0432bc013f362e396e2b2f0a0723 /activerecord/test/cases/serialized_attribute_test.rb
parente4c9bd9828e107214d03a66679a89f669e3722fa (diff)
downloadrails-dd8b5fb9d30f355d4eab6376b8d9e025e90b14d3.tar.gz
rails-dd8b5fb9d30f355d4eab6376b8d9e025e90b14d3.tar.bz2
rails-dd8b5fb9d30f355d4eab6376b8d9e025e90b14d3.zip
`update_column` take ruby-land input, not database-land input
In the case of serialized columns, we would expect the unserialized value as input, not the serialized value. The original issue which made this distinction, #14163, introduced a bug. If you passed serialized input to the method, it would double serialize when it was sent to the database. You would see the wrong input upon reloading, or get an error if you had a specific type on the serialized column. To put it another way, `update_column` is a special case of `update_all`, which would take `['a']` and not `['a'].to_yaml`, but you would not pass data from `params` to it. Fixes #18037
Diffstat (limited to 'activerecord/test/cases/serialized_attribute_test.rb')
-rw-r--r--activerecord/test/cases/serialized_attribute_test.rb6
1 files changed, 4 insertions, 2 deletions
diff --git a/activerecord/test/cases/serialized_attribute_test.rb b/activerecord/test/cases/serialized_attribute_test.rb
index 66f345d805..56a0e92e1d 100644
--- a/activerecord/test/cases/serialized_attribute_test.rb
+++ b/activerecord/test/cases/serialized_attribute_test.rb
@@ -243,8 +243,9 @@ class SerializedAttributeTest < ActiveRecord::TestCase
t = Topic.create(content: "first")
assert_equal("first", t.content)
- t.update_column(:content, Topic.type_for_attribute('content').type_cast_for_database("second"))
- assert_equal("second", t.content)
+ t.update_column(:content, ["second"])
+ assert_equal(["second"], t.content)
+ assert_equal(["second"], t.reload.content)
end
def test_serialized_column_should_unserialize_after_update_attribute
@@ -253,5 +254,6 @@ class SerializedAttributeTest < ActiveRecord::TestCase
t.update_attribute(:content, "second")
assert_equal("second", t.content)
+ assert_equal("second", t.reload.content)
end
end