Skip to content

Commit

Permalink
Fix the bug that serializer could not be found if the association's s…
Browse files Browse the repository at this point in the history
…erializer is namespaced but the model is not

[fix #2295]
  • Loading branch information
Hirurg103 committed Oct 20, 2018
1 parent eb865c2 commit db4e526
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 0 deletions.
1 change: 1 addition & 0 deletions lib/active_model/serializer/lazy_association.rb
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ def instantiate_serializer(object)
serializer_options[:serializer_context_class] = association_options.fetch(:parent_serializer).class
serializer = reflection_options.fetch(:serializer, nil)
serializer_options[:serializer] = serializer if serializer
serializer_options[:namespace] = reflection_options[:namespace] if reflection_options[:namespace]
serializer_class.new(object, serializer_options)
end

Expand Down
50 changes: 50 additions & 0 deletions test/serializers/associations_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -285,6 +285,56 @@ def test_associations_namespaced_resources
end
end

class AssociationsNamespacedSerializersTest < ActiveSupport::TestCase
class Post < ::Model
associations :comments, :author, :description

def latest_comments
comments[0..3]
end
end
class Comment < ::Model; end
class Author < ::Model; end
class Description < ::Model; end

class ResourceNamespace
class PostSerializer < ActiveModel::Serializer
has_many :comments, namespace: ResourceNamespace
has_many :latest_comments, namespace: ResourceNamespace
belongs_to :author, namespace: ResourceNamespace
has_one :description, namespace: ResourceNamespace
end
class CommentSerializer < ActiveModel::Serializer; end
class AuthorSerializer < ActiveModel::Serializer; end
class DescriptionSerializer < ActiveModel::Serializer; end
end

def setup
@comment = Comment.new
@author = Author.new
@description = Description.new
@post = Post.new(comments: [@comment],
author: @author,
description: @description)
@post_serializer = ResourceNamespace::PostSerializer.new(@post)
end

def test_associations_namespaced_serializers
@post_serializer.associations.each do |association|
case association.key
when :comments, :latest_comments
assert_instance_of(ResourceNamespace::CommentSerializer, association.lazy_association.serializer.first)
when :author
assert_instance_of(ResourceNamespace::AuthorSerializer, association.lazy_association.serializer)
when :description
assert_instance_of(ResourceNamespace::DescriptionSerializer, association.lazy_association.serializer)
else
flunk "Unknown association: #{key}"
end
end
end
end

class NestedSerializersTest < ActiveSupport::TestCase
class Post < ::Model
associations :comments, :author, :description
Expand Down

0 comments on commit db4e526

Please sign in to comment.