diff --git a/CHANGELOG.md b/CHANGELOG.md index d49d07ade..f2a8e2bd2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ Breaking changes: Features: Fixes: +- [#1710](https://github.com/rails-api/active_model_serializers/pull/1710) Prevent association loading when `include_data` option + is set to `false`. (@groyoh) Misc: - [#1734](https://github.com/rails-api/active_model_serializers/pull/1734) Adds documentation for conditional attribute (@lambda2) diff --git a/lib/active_model/serializer/reflection.rb b/lib/active_model/serializer/reflection.rb index aba75a359..fbc421f73 100644 --- a/lib/active_model/serializer/reflection.rb +++ b/lib/active_model/serializer/reflection.rb @@ -75,10 +75,10 @@ def value(serializer) if block block_value = instance_exec(serializer, &block) - if block_value == :nil - serializer.read_attribute_for_serialization(name) - else + if block_value != :nil block_value + elsif @_include_data + serializer.read_attribute_for_serialization(name) end else serializer.read_attribute_for_serialization(name) diff --git a/test/adapter/json_api/relationships_test.rb b/test/adapter/json_api/relationships_test.rb index 5fa0de8df..c0656cf1b 100644 --- a/test/adapter/json_api/relationships_test.rb +++ b/test/adapter/json_api/relationships_test.rb @@ -5,7 +5,8 @@ class Serializer module Adapter class JsonApi class RelationshipTest < ActiveSupport::TestCase - RelationshipAuthor = Class.new(::Model) + class RelationshipAuthor < ::Model; end + class RelationshipAuthorSerializer < ActiveModel::Serializer has_one :bio do link :self, '//example.com/link_author/relationships/bio' @@ -71,7 +72,6 @@ def cached_roles def setup @post = Post.new(id: 1337, comments: [], author: nil) - @blog = Blog.new(id: 1337, name: 'extra') @bio = Bio.new(id: 1337) @like = Like.new(id: 1337) @role = Role.new(id: 'from-record') @@ -82,7 +82,6 @@ def setup @author = RelationshipAuthor.new( id: 1337, posts: [@post], - blog: @blog, reviewer: @reviewer, bio: @bio, likes: [@like], @@ -158,10 +157,16 @@ def test_relationship_meta end def test_relationship_not_including_data + @author.define_singleton_method(:read_attribute_for_serialization) do |attr| + fail 'should not be called' if attr == :blog + super(attr) + end expected = { links: { self: '//example.com/link_author/relationships/blog' } } - assert_relationship(:blog, expected) + assert_nothing_raised do + assert_relationship(:blog, expected) + end end def test_relationship_including_data_explicit