diff options
author | Godfrey Chan <godfreykfc@gmail.com> | 2014-07-05 14:23:01 -0700 |
---|---|---|
committer | Godfrey Chan <godfreykfc@gmail.com> | 2014-07-05 14:34:13 -0700 |
commit | a03097759bd7103bb9db253e7ba095f011453f75 (patch) | |
tree | 4a20132e2c7fe66f25e7170ae751d3b67d92b3f5 /activerecord/lib/active_record/attribute_methods/serialization.rb | |
parent | acec038b38dc248c5c2f350de69ab89d9b1402c7 (diff) | |
download | rails-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/serialization.rb')
-rw-r--r-- | activerecord/lib/active_record/attribute_methods/serialization.rb | 7 |
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) |