diff --git a/lib/active_model/serializer/adapter/json_api.rb b/lib/active_model/serializer/adapter/json_api.rb index 567630f8..587485e5 100644 --- a/lib/active_model/serializer/adapter/json_api.rb +++ b/lib/active_model/serializer/adapter/json_api.rb @@ -62,7 +62,7 @@ module ActiveModel resource_path = [parent, resource_name].compact.join('.') if include_assoc?(resource_path) - plural_name = resource_name.to_s.pluralize.to_sym + plural_name = serialized_object_type(serializer).pluralize.to_sym attrs = [attributes_for_serializer(serializer, @options)].flatten @top[:linked] ||= {} @top[:linked][plural_name] ||= [] diff --git a/test/adapter/json_api/belongs_to_test.rb b/test/adapter/json_api/belongs_to_test.rb index 5084dcc0..e641429e 100644 --- a/test/adapter/json_api/belongs_to_test.rb +++ b/test/adapter/json_api/belongs_to_test.rb @@ -8,6 +8,7 @@ module ActiveModel def setup @author = Author.new(id: 1, name: 'Steve K.') @author.bio = nil + @author.roles = [] @post = Post.new(id: 42, title: 'New Post', body: 'Body') @anonymous_post = Post.new(id: 43, title: 'Hello!!', body: 'Hello, world!!') @comment = Comment.new(id: 1, body: 'ZOMG A COMMENT') @@ -54,7 +55,53 @@ module ActiveModel def test_include_type_for_association_when_is_different_than_name serializer = BlogSerializer.new(@blog) adapter = ActiveModel::Serializer::Adapter::JsonApi.new(serializer) - assert_equal({type: "author", id: "1"}, adapter.serializable_hash[:blogs][:links][:writer]) + links = adapter.serializable_hash[:blogs][:links] + expected = { + writer: { + type: "author", + id: "1" + }, + articles: { + type: "posts", + ids: ["42", "43"] + } + } + assert_equal expected, links + end + + def test_include_linked_resources_with_type_name + serializer = BlogSerializer.new(@blog) + adapter = ActiveModel::Serializer::Adapter::JsonApi.new(serializer, include: "writer,articles") + linked = adapter.serializable_hash[:linked] + expected = { + authors: [{ + id: "1", + name: "Steve K.", + links: { + posts: [], + roles: [], + bio: nil + } + }], + posts: [{ + title: "New Post", + body: "Body", + id: "42", + links: { + comments: ["1"], + author: "1" + } + }, { + title: "Hello!!", + body: "Hello, world!!", + id: "43", + links: { + comments: [], + author: nil + } + }] + } + assert_equal expected, linked end end end