2

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

  1. normal_workflow
  2. special_workflow

有一个project模型与使用has_many/belongs_to关联的工作流模型相关。

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

我想返回一组具有以下要求的工作流(其中包括 2 条记录,一条为normal_workflow,另一条为special_workflow):

  1. NormalWorkflowWorkflow必须仅显示带有一些元信息的所有字段的子集。
  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

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

4

0 回答 0