Ruby on rails Rails按名称将同级对象序列化为组(活动模型序列化程序)

Ruby on rails Rails按名称将同级对象序列化为组(活动模型序列化程序),ruby-on-rails,json,active-model-serializers,Ruby On Rails,Json,Active Model Serializers,我不知道最好的方法是什么;我有一个通用系统,可以通过使用ActiveModelSerializer从api请求数据对象并返回json,它非常简单 对于一个类,我需要返回与普通类序列化不同格式的数据,并且不确定最佳方法。无论看起来如何,我都要为这门课做一个“elsif”作为回报(这让我有点痛苦) 目前,我有一个名为“curve”的类,用户有很多这样的类,因此请求用户的曲线会得到如下结果: [{ "id": 7, "name": "A", "angle": 30, "

我不知道最好的方法是什么;我有一个通用系统,可以通过使用ActiveModelSerializer从api请求数据对象并返回json,它非常简单

对于一个类,我需要返回与普通类序列化不同格式的数据,并且不确定最佳方法。无论看起来如何,我都要为这门课做一个“elsif”作为回报(这让我有点痛苦)

目前,我有一个名为“curve”的类,用户有很多这样的类,因此请求用户的曲线会得到如下结果:

[{
    "id": 7,
    "name": "A",
    "angle": 30,
    "date": "2017-05-23T01:52:00.589-04:00",
    "direction": "left",
    "top": "C1",
    "bottom": "C4",
    "risser": 3,
    "sanders": 8
}, {
    "id": 8,
    "name": "B",
    "angle": 0,
    "date": "2017-05-23T01:52:56.107-04:00",
    "direction": "right",
    "top": "C5",
    "bottom": "C6",
    "risser": null,
    "sanders": null
}, {
    "id": 9,
    "name": "A",
    "angle": 22,
    "date": "2017-05-25T01:56:00.656-04:00",
    "direction": "right",
    "top": "C3",
    "bottom": "C5",
    "risser": null,
    "sanders": null
}, {
    "id": 11,
    "name": "C",
    "angle": 3,
    "date": "2017-05-26T01:57:08.078-04:00",
    "direction": "right",
    "top": "C4",
    "bottom": "C7",
    "risser": null,
    "sanders": null
}]
但我实际上需要按名称对每个进行分组,如下所示:

[{
        "name": "A",
        "points": [{
            "id": 7,
            "name": "A",
            "angle": 30,
            "date": "2017-05-23T01:52:00.589-04:00",
            "direction": "left",
            "top": "C1",
            "bottom": "C4",
            "risser": 3,
            "sanders": 8
        }, {
            "id": 9,
            "name": "A",
            "angle": 22,
            "date": "2017-05-25T01:56:00.656-04:00",
            "direction": "right",
            "top": "C3",
            "bottom": "C5",
            "risser": null,
            "sanders": null
        }]
    },
    {
        "name": "B",
        "points": [{
            "id": 8,
            "name": "B",
            "angle": 0,
            "date": "2017-05-23T01:52:56.107-04:00",
            "direction": "right",
            "top": "C5",
            "bottom": "C6",
            "risser": null,
            "sanders": null
        }]
    },
    {
        "name": "C",
        "points": [{
            "id": 11,
            "name": "C",
            "angle": 3,
            "date": "2017-05-26T01:57:08.078-04:00",
            "direction": "right",
            "top": "C4",
            "bottom": "C7",
            "risser": null,
            "sanders": null
        }]
    }
]
现在我知道我可以分组并处理响应,但即使这样,也不会使用默认的曲线序列化程序。我还可以创建一个定制的GroupedCurve序列化程序,并可能使用CurveSerializer处理每条曲线——但在这一点上,这不就像获取默认数组、进行映射、构造自己的哈希一样吗

从上到下处理数据的最佳/最干净的方式是什么

更新: 类似于以下内容的“执行任务”,但任务不干净:

def self.reformat_曲线(曲线)
arr=[]
曲线。每个都有|
alpha=i[:名称]
entry=arr.find{| chunk | chunk[:name]==alpha}
如果输入.nil?

arr可能会帮助你。根据您在控制器中的需求定制您的响应,jbuilder将负责将其呈现为json响应;问题是没有实际的视图,这是一个api响应——所以我想我会返回一个渲染。看起来我应该能够有一个曲线序列化程序和一个自定义的序列化程序;调用为每个…使用曲线序列化程序的自定义\u序列化程序?自定义\u序列化程序已经足够好了。
def self.reformat_curves(curves)
        arr = []
        curves.each do |i|
            alpha = i[:name]
            entry = arr.find{|chunk| chunk[:name]==alpha}
            if entry.nil?
                arr << {name: alpha, points: [i]}
            else
                entry[:points] << i 
            end
        end
        return arr
    end