aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/attribute_methods
diff options
context:
space:
mode:
authorGodfrey Chan <godfreykfc@gmail.com>2014-07-05 14:23:01 -0700
committerGodfrey Chan <godfreykfc@gmail.com>2014-07-05 14:34:13 -0700
commita03097759bd7103bb9db253e7ba095f011453f75 (patch)
tree4a20132e2c7fe66f25e7170ae751d3b67d92b3f5 /activerecord/lib/active_record/attribute_methods
parentacec038b38dc248c5c2f350de69ab89d9b1402c7 (diff)
downloadrails-a03097759bd7103bb9db253e7ba095f011453f75.tar.gz
rails-a03097759bd7103bb9db253e7ba095f011453f75.tar.bz2
rails-a03097759bd7103bb9db253e7ba095f011453f75.zip
Merge pull request #16059 from jenncoop/json-serialized-attr
Fixed issue with ActiveRecord serialize object as JSON Conflicts: activerecord/CHANGELOG.md activerecord/lib/active_record/attribute_methods/serialization.rb
Diffstat (limited to 'activerecord/lib/active_record/attribute_methods')
-rw-r--r--activerecord/lib/active_record/attribute_methods/serialization.rb7
1 files changed, 6 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/attribute_methods/serialization.rb b/activerecord/lib/active_record/attribute_methods/serialization.rb
index 734d94865a..264ce2bdfa 100644
--- a/activerecord/lib/active_record/attribute_methods/serialization.rb
+++ b/activerecord/lib/active_record/attribute_methods/serialization.rb
@@ -37,7 +37,12 @@ module ActiveRecord
# serialize :preferences, Hash
# end
def serialize(attr_name, class_name_or_coder = Object)
- coder = if [:load, :dump].all? { |x| class_name_or_coder.respond_to?(x) }
+ # When ::JSON is used, force it to go through the Active Support JSON encoder
+ # to ensure special objects (e.g. Active Record models) are dumped correctly
+ # using the #as_json hook.
+ coder = if class_name_or_coder == ::JSON
+ Coders::JSON
+ elsif [:load, :dump].all? { |x| class_name_or_coder.respond_to?(x) }
class_name_or_coder
else
Coders::YAMLColumn.new(class_name_or_coder)