使用活动模型序列化程序根据条件嵌套相同的模型

时间:2017-04-13 14:09:41

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

我想使用活动模型序列化程序来序列化JSON。问题是嵌套需要基于某些标准在同一模型上,例如

我的模特是

name  | code | description     | group_name | group_code
--------------------------------------------------------
adhir | ad   | some desc       | grp1       | g1
aima  | ai   | some other desc | grp1       | g1

我希望JSON看起来像

[
  { 
    group_name: grp1, 
    group_code: g1, 
    values: [
      { 
        name: adhir, 
        code: ad, 
        desc: some desc
      }, 
      { 
        name: aima, 
        code: ai, 
        desc: some other description
      }
    ]

所有帮助表示赞赏

1 个答案:

答案 0 :(得分:0)

我不确定是否可以在普通的活动模型序列化器中实现。您可以将它与简单的JSON生成结合起来。此外,您可以在地图中插入自己的序列化程序。

 Category
   .all
   .group_by { |category| [category.group_name, category.group_code] }
   .map do |key, records|
   {
     group_name: key[0],
     group_code: key[1],
     values: records.map { |record| CategoriesSerializer.new(record, {}).attributes }
   }
 end

使用序列化程序:

 class CategoriesSerializer < ActiveModel::Serializer
   attributes :name, :code, :description
 end