我有一个workflow
模型和 2 种工作流程
- normal_workflow
- special_workflow
有一个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
因此,我正在寻找一种更简洁的解决方案,这将有助于保持代码干燥并且对其他类型也具有一定的可扩展性。(它可能正在使用一些装饰器或任何其他对象)