Sto utilizzando il JSONAPI format insieme a Active Model Serializers per creare un API con rails-api.Come selezionare gli attributi desiderati per le relazioni di serializzazione di modelli attivi
Ho un serializzatore che mostra uno specifico post
che ha molti topics
e attualmente, nelle relazioni, elenca quegli argomenti. Attualmente elenca solo ID e tipo. Voglio mostrare anche il titolo dell'argomento.
Alcuni direbbero di utilizzare include: 'topics'
nel mio controller, ma non ho bisogno del record di argomento completo, solo il titolo.
Domanda: Come si specificano gli attributi che si desidera visualizzare dagli argomenti?
Quello che ho
"data": {
"id": "26",
"type": "posts",
"attributes": {
"title": "Test Title 11"
},
"relationships": {
"topics": {
"data": [
{
"id": "1",
"type": "topics"
}
]
}
}
}
quello che voglio
"data": {
"id": "26",
"type": "posts",
"attributes": {
"title": "Test Title 11"
},
"relationships": {
"topics": {
"data": [
{
"id": "1",
"type": "topics",
"title": "Topic Title"
}
]
}
}
}
Le mie lezioni serializzatore attuali EDIT: questo è quello che sto cercando per favore.
class PostSerializer < ActiveModel::Serializer
attributes :title
belongs_to :domain
belongs_to :user
has_many :topics, serializer: TopicSerializer
def topics
# THIS IS WHAT I AM REALLY ASKING FOR
end
end
class TopicSerializer < ActiveModel::Serializer
attributes :title, :description
belongs_to :parent
has_many :children
end
Una cosa che ho cercato - c'è una risposta al di sotto che rende questo lavoro, ma non è davvero quello che sto cercando.
class PostSerializer < ActiveModel::Serializer
attributes :title, :topics
belongs_to :domain
belongs_to :user
def topics
# THIS WAS ANSWERED BELOW! THANK YOU
end
end
Grazie! Ha funzionato. – alassiter
Ho svitato questa risposta b/c ha risposto a uno dei problemi che ho presentato. Non volevo confondere questa domanda, ma dopo aver incontrato di nuovo lo stesso problema, mi sono reso conto che non ero chiaro. Non sono sicuro dell'etichetta su questo, quindi per favore perdonami. La domanda era intesa a specificare gli attributi sulla relazione, vedere .. "Cosa voglio" e la risposta qui si espande su una delle cose che ho provato. Funziona, ma quello che voglio veramente è diverso. – alassiter
Non vedo un buon esempio di questo nei documenti, quindi direi che non è supportato o non funziona in quel modo che ti piacerebbe. Sembra che la funzione che sovrascrive un'associazione abbia lo scopo di modificare l'ambito e non gli attributi. vedere qui https://github.com/rails-api/active_model_serializers#user-content-overriding-association-methods. Se non si includono o si caricano i dati associati nel controller, non verrà generato un N + 1 nel serializzatore? Se stai usando postgres potresti restituire JSON dal db o massaggiare i dati in SQL e avere un serializzatore personalizzato. – penner