如何在Fast Json Api或Active Model Serializer中为STI模型使用2种不同的串行器

时间:2019-02-12 07:59:13

标签: ruby-on-rails active-model-serializers fastjsonapi

我有一个workflow模型和2种类型的工作流程

  1. normal_workflow
  2. special_workflow

存在一个project模型,该模型与使用has_many/belongs_to关联的工作流模型相关。

现在要获得项目的所有工作流程,我们有一个WorkflowsController

我想返回一个满足以下要求的工作流数组(其中将包含2条记录,一条记录用于normal_workflow,另一条记录用于special_workflow

  1. NormalWorkflow仅显示Workflow所有字段的子集,并提供一些元信息。
  2. SpecialWorkflow必须使用某些元数据显示Workflow的不同字段子集。

一种实现方法是检查每个属性和关系的type中的workflow。我认为这种方法不是很好,因为当工作流的类型增加时,序列化程序中的条件也会增加。

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

因此,我正在寻找一种更清洁的解决方案,该解决方案将有助于使代码保持DRY,并且对于其他类型也可以扩展。 (它可能正在使用某些装饰器或任何其他对象)

0 个答案:

没有答案