diff --git a/lib/active_model/serializer.rb b/lib/active_model/serializer.rb index 18072fd2..762dfb2c 100644 --- a/lib/active_model/serializer.rb +++ b/lib/active_model/serializer.rb @@ -17,6 +17,11 @@ module ActiveModel yield SETTINGS end + def embed(type, options={}) + SETTINGS[:embed] = type + SETTINGS[:include] = true if options[:include] + end + def serializer_for(resource) if resource.respond_to?(:to_ary) ArraySerializer diff --git a/lib/active_model/serializer/associations.rb b/lib/active_model/serializer/associations.rb index 4d3ec5fe..dd65c51c 100644 --- a/lib/active_model/serializer/associations.rb +++ b/lib/active_model/serializer/associations.rb @@ -8,8 +8,8 @@ module ActiveModel @name = name @options = options - self.embed = options[:embed] - @embed_in_root = @embed_ids && options[:include] + self.embed = options[:embed] || SETTINGS[:embed] + @embed_in_root = @embed_ids && (options[:include] || SETTINGS[:include]) @embed_key = options[:embed_key] || :id @key = options[:key] @embedded_key = options[:root] diff --git a/test/unit/active_model/serializer/has_many_test.rb b/test/unit/active_model/serializer/has_many_test.rb index 3c0cddaa..b2b99ebd 100644 --- a/test/unit/active_model/serializer/has_many_test.rb +++ b/test/unit/active_model/serializer/has_many_test.rb @@ -84,12 +84,16 @@ module ActiveModel end def test_associations_embedding_ids_including_objects_serialization_using_as_json - @association.embed_in_root = true + PostSerializer.embed :ids, include: true + PostSerializer._associations[0].send :initialize, @association.name, @association.options + @post_serializer.root = nil assert_equal({ 'post' => { 'title' => 'Title 1', 'body' => 'Body 1', 'comment_ids' => @post.comments.map { |c| c.object_id } }, 'comments' => [{ 'content' => 'C1' }, { 'content' => 'C2' }] }, @post_serializer.as_json) + ensure + SETTINGS.clear end def test_associations_using_a_given_serializer