jsonapi-serializers icon indicating copy to clipboard operation
jsonapi-serializers copied to clipboard

Possible to specify serializer to use for relationship of different name?

Open mecampbellsoup opened this issue 4 years ago • 3 comments

I have a JobSerializer that has 2 relationships - the hosted file, and outputs.

(This is because a job is rendered from a file that the user uploaded - the "hosted file" - and the result of running the job are output files - "outputs".)

Both the singular hosted file, and the plural output, relationships are modeled by a class called HostedFile (not backed by ActiveRecord, but rather backed by the filesystem).

I want to use the same serializer for both relationships, i.e. API::V1::HostedFileSerializer.

Is it possible to specify the serializer to use for a relationship, e.g.:

class API::V1::JobSerializer < API::V1::BaseSerializer
  include JSONAPI::Serializer

  has_one :hosted_file
  has_many :outputs, serializer: API::V1::HostedFileSerializer

Ideally I could then do something like the following and both relationships would be serialized using the API::V1::HostedFileSerializer:

class JobsController < ApplicationController
  def show
    serialize_model job, include: ['outputs', 'hosted-file']
  end
end

mecampbellsoup avatar Oct 13 '20 13:10 mecampbellsoup

BTW, I tried doing the following as well:

# Added to bottom of `api/v1/hosted_file_serializer.rb` file
API::V1::OutputSerializer = API::V1::HostedFileSerializer

mecampbellsoup avatar Oct 13 '20 14:10 mecampbellsoup

I agree, It'd be great to specify the serializer in the method has_many and has_one.

like this:

has_one :foo, serializer API::V1::Foo
has_many :bar, serializer: API::V1::Bar

digaoddc avatar Oct 29 '20 15:10 digaoddc

FWIW, I ended up defining Job#outputs to return an array of HostedFile instances, and this library seems to look at the type/class of the relationship... long story short, my JobSerializer#outputs relationship is correctly serialized using my HostedFileSerializer.

mecampbellsoup avatar Oct 29 '20 15:10 mecampbellsoup