Je souhaite utiliser un sérialiseur dans un autre sérialiseur pour pouvoir ajouter une paire clé-valeur au niveau supérieur, mais il semble que lorsque je le fais, le sérialiseur de bas niveau ne fonctionne pas anymore-Sérialiseur imbriqué Rails n'utilisant pas les méthodes pour sortir les clés
Mes fichiers:
ItemsController
class ItemsController
def index
open_items = Items.
select("distinct on (open_item_id) *").
preload(:company, :project)
total = open_items.count("id")
render json: {
total: total,
items: paginate(open_items, per_page: 2), serializer: ItemsSerializer
}, status: :ok
end
end
ItemsSerializer
class ItemsSerializer < ActiveModel::Serializer
attribute :total
has_many :items, serializer: ItemSerializer
end
ItemSerializer
classe ItemSerializer < ActiveModel :: sérialiseur attributs: id, : projet, : entreprise,
def company
{
name: object.company.name,
id: object.company.id
}
end
def project
{
name: object.project.name,
id: object.project.id
}
end
end
Je veux obtenir une autre paire clé/valeur à ma sortie sérialiseur ci-dessous afin que je puisse obtenir quelque chose comme ceci:
{
"total": 1,
"items": [
{
"id": 42920375,
"company": {
"id": 123,
"name": "CompanyName"
},
"project": {
"id": 456,
"name": "ProjectName"
}
}
]
}
Mais actuellement, je reçois:
{
"total": 1,
"items": [
{
"id": 42920375,
"company_id": 5842,
"project_id": 191741,
}
]
}
Je pense que le problème est que 'ItemsSerializer' ne fonctionne pas comme vous le souhaitez. Il doit correspondre à un nom de modèle actif. Ce que vous obtenez est le résultat de la méthode 'to_json' d'ActiveRecord. – EJ2015