2017-04-13 1 views
0

Je souhaite utiliser le sérialiseur de modèle actif pour la sérialisation de JSON. Le problème est que l'imbrication doit être sur le même modèle en fonction de certains critères, par ex.Utilisation du sérialiseur de modèle actif pour imbriquer le même modèle en fonction des critères

mon modèle est

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

Je veux que le JSON ressemble

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

toute aide est appréciée

Répondre

0

Je ne suis pas sûr qu'il est possible de mettre en œuvre en modèle actif plaine -serializers. Vous pouvez le combiner avec une simple génération JSON. De plus, vous pouvez insérer votre propre sérialiseur dans la carte.

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 

Avec un sérialiseur:

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