Ruby on rails 如何在Fast Json Api或活动模型序列化程序中为STI模型提供两个不同的序列化程序

Ruby on rails 如何在Fast Json Api或活动模型序列化程序中为STI模型提供两个不同的序列化程序,ruby-on-rails,active-model-serializers,fastjsonapi,Ruby On Rails,Active Model Serializers,Fastjsonapi,我有一个工作流模型和两种类型的工作流 正常工作流程 特殊工作流程 有一个项目模型,该模型与使用的工作流模型相关,它有许多/属于关联 现在,为了获取项目的所有工作流,我们有了一个WorkflowsController 我想返回一组工作流(其中包括两条记录,一条用于正常\u工作流,另一条用于特殊\u工作流),并满足以下要求: NormalWorkflow必须仅显示Workflow所有字段的子集以及一些元信息 SpecialWorkflow必须用一些元数据显示工作流字段的不同子集 实现这一点的一种方法

我有一个
工作流
模型和两种类型的工作流

  • 正常工作流程
  • 特殊工作流程
  • 有一个
    项目
    模型,该模型与使用
    的工作流模型相关,它有许多/属于
    关联

    现在,为了获取项目的所有工作流,我们有了一个
    WorkflowsController

    我想返回一组工作流(其中包括两条记录,一条用于
    正常\u工作流
    ,另一条用于
    特殊\u工作流
    ),并满足以下要求:

  • NormalWorkflow
    必须仅显示
    Workflow
    所有字段的子集以及一些元信息
  • SpecialWorkflow
    必须用一些元数据显示
    工作流
    字段的不同子集
  • 实现这一点的一种方法是为每个属性和关系检查
    工作流的
    类型。我认为这种方法不太好,因为当工作流类型增加时,序列化程序中的条件也会增加

    class Project
        has_many :workflows
        has_many :normal_workflows
        has_many :special_workflows
    end
    
    class Workflow < ApplicationRecord
        belongs_to :project
    end
    
    class NormalWorkflow < Workflow
        # STI model
        belongs_to :project
    end
    
    class SpecialWorkflow < Workflow
        # STI model
        belongs_to :project
    end
    
    class WorkflowsController < ApplicationController
        # Using fast-json-api gem
        def index
            @workflows = WorkflowSerializer.new(@project.workflows).serialize_json
        end
    end
    
    类项目
    有很多:工作流
    有很多:正常的工作流程
    有很多:特殊的工作流程
    结束
    类工作流<应用程序记录
    属于:项目
    结束
    类NormalWorkflow

    因此,我正在寻找一个更干净的解决方案,这将有助于保持代码干燥,也有点可扩展的其他类型。(它可能使用一些装饰器或任何其他对象)

    对于AMS,您可以从