From 4d7c2457d736993ff5b91afb9480980cd77853b0 Mon Sep 17 00:00:00 2001 From: Dennis Stumm Date: Sun, 8 Oct 2017 00:03:38 +0200 Subject: [PATCH] Fix deserialization of polymorphic relationships (#2200) * Classify the relationship type for polymorphic associations --- CHANGELOG.md | 1 + .../adapter/json_api/deserialization.rb | 2 +- test/action_controller/json_api/deserialization_test.rb | 2 +- test/adapter/json_api/parse_test.rb | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8ff25332..56059d96 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ Features: Fixes: - [#2022](https://github.com/rails-api/active_model_serializers/pull/2022) Mutation of ActiveModelSerializers::Model now changes the attributes. Originally in [#1984](https://github.com/rails-api/active_model_serializers/pull/1984). (@bf4) +- [#2200](https://github.com/rails-api/active_model_serializers/pull/2200) Fix deserialization of polymorphic relationships. (@dennis95stumm) Misc: diff --git a/lib/active_model_serializers/adapter/json_api/deserialization.rb b/lib/active_model_serializers/adapter/json_api/deserialization.rb index b79125ac..d846cacc 100644 --- a/lib/active_model_serializers/adapter/json_api/deserialization.rb +++ b/lib/active_model_serializers/adapter/json_api/deserialization.rb @@ -189,7 +189,7 @@ module ActiveModelSerializers polymorphic = (options[:polymorphic] || []).include?(assoc_name.to_sym) if polymorphic - hash["#{prefix_key}_type".to_sym] = assoc_data.present? ? assoc_data['type'] : nil + hash["#{prefix_key}_type".to_sym] = assoc_data.present? ? assoc_data['type'].classify : nil end hash diff --git a/test/action_controller/json_api/deserialization_test.rb b/test/action_controller/json_api/deserialization_test.rb index 025f857b..91f56076 100644 --- a/test/action_controller/json_api/deserialization_test.rb +++ b/test/action_controller/json_api/deserialization_test.rb @@ -45,7 +45,7 @@ module ActionController response = JSON.parse(@response.body) expected = { 'restriction_for_id' => '67', - 'restriction_for_type' => 'discounts', + 'restriction_for_type' => 'Discount', 'restricted_to_id' => nil, 'restricted_to_type' => nil } diff --git a/test/adapter/json_api/parse_test.rb b/test/adapter/json_api/parse_test.rb index bee79c8c..777abf3e 100644 --- a/test/adapter/json_api/parse_test.rb +++ b/test/adapter/json_api/parse_test.rb @@ -125,7 +125,7 @@ module ActiveModelSerializers src: 'http://example.com/images/productivity.png', author_id: nil, photographer_id: '9', - photographer_type: 'people', + photographer_type: 'Person', comment_ids: %w(1 2) } assert_equal(expected, parsed_hash)