diff --git a/lib/active_model/serializer.rb b/lib/active_model/serializer.rb index 855e020a..1e9787ba 100644 --- a/lib/active_model/serializer.rb +++ b/lib/active_model/serializer.rb @@ -392,6 +392,10 @@ module ActiveModel Associations::HasOne end + options[:value] ||= send(name) + options[:embed] = _embed unless options.key?(:embed) + options[:include] = _root_embed unless options.key?(:include) + options[:serializer_options] = self.options association = association_class.new(name, self, options) if association.embed_ids? diff --git a/lib/active_model/serializer/associations.rb b/lib/active_model/serializer/associations.rb index 35c0dc0e..ae880246 100644 --- a/lib/active_model/serializer/associations.rb +++ b/lib/active_model/serializer/associations.rb @@ -38,19 +38,19 @@ module ActiveModel end def associated_object - option(:value) || source_serializer.send(name) + option(:value) end def embed_ids? - [:id, :ids].include? option(:embed, source_serializer._embed) + [:id, :ids].include? option(:embed) end def embed_objects? - [:object, :objects].include? option(:embed, source_serializer._embed) + [:object, :objects].include? option(:embed) end def embed_in_root? - option(:include, source_serializer._root_embed) + option(:include) end def embeddable? @@ -61,9 +61,9 @@ module ActiveModel def find_serializable(object) if target_serializer - target_serializer.new(object, source_serializer.options) + target_serializer.new(object, option(:serializer_options)) elsif object.respond_to?(:active_model_serializer) && (ams = object.active_model_serializer) - ams.new(object, source_serializer.options) + ams.new(object, option(:serializer_options)) else object end