我有一个workflow
模型和2种类型的工作流程
存在一个project
模型,该模型与使用has_many/belongs_to
关联的工作流模型相关。
现在要获得项目的所有工作流程,我们有一个WorkflowsController
。
我想返回一个满足以下要求的工作流数组(其中将包含2条记录,一条记录用于normal_workflow
,另一条记录用于special_workflow
)
NormalWorkflow
仅显示Workflow
所有字段的子集,并提供一些元信息。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,并且对于其他类型也可以扩展。 (它可能正在使用某些装饰器或任何其他对象)