samedi 23 mai 2015

Load associations to one level while conditionally sideloading associations in Active model serializers

AMS version 0.8.3,

I created a base_serializer.rb like this and extended the same.

class BaseSerializer < ActiveModel::Serializer
  def include_associations!
    if @options[:embed]
      embed = @options[:embed].split(',').map{|item| item.strip.to_sym}
      embed.each do |assoc|
        include! assoc if _associations.keys.include?(assoc)
      end
    end
  end
end

class EventSerializer < BaseSerializer
  attributes :id, :name
  has_many :organizers, serializer: OrganizerSerializer
  has_many :participants, serializer: ParticipantSerializer
end

class OrganizerSerializer < BaseSerializer
  attributes :id, :name
  has_many :related, serializer: RelatedSerializer
end

class ParticipantSerializer < BaseSerializer
  attributes :id, :name
  has_many :related, serializer: RelatedSerializer
end

class RelatedSerializer < BaseSerializer
  attributes :id, :name
  has_many :something, serializer: SomethingSerializer
end

and the index method in EventsController is written as

# GET /events?embed=organizers,participants
  def index
      @events = Event.all
      render json: @events, embed: params[:embed]
  end

With this I can get the :id and :name of events, organizers and participants. But, I want the attributes of related association as well. I don't need details of something serializer. I want to go till this level for each association. How can I achieve that?

Aucun commentaire:

Enregistrer un commentaire