Ich verwende die JSONAPI format zusammen mit Active Model Serializers, um eine API mit rails-api zu erstellen.Wie wähle ich die Attribute aus, die ich für aktive Modell-Serializer-Beziehungen haben möchte
Ich habe einen Serializer, der eine spezifische post
zeigt, die viele topics
hat und derzeit unter Beziehungen diese Themen auflistet. Es listet derzeit nur die ID und den Typ auf. Ich möchte auch den Titel des Themas zeigen.
Einige würden sagen, include: 'topics'
in meinem Controller zu verwenden, aber ich brauche nicht den vollständigen Thema Datensatz, nur seinen Titel.
Frage: Wie lege ich fest, welche Attribute ich von Themen anzeigen möchte?
Was ich
"data": {
"id": "26",
"type": "posts",
"attributes": {
"title": "Test Title 11"
},
"relationships": {
"topics": {
"data": [
{
"id": "1",
"type": "topics"
}
]
}
}
}
habe Was ich will
"data": {
"id": "26",
"type": "posts",
"attributes": {
"title": "Test Title 11"
},
"relationships": {
"topics": {
"data": [
{
"id": "1",
"type": "topics",
"title": "Topic Title"
}
]
}
}
}
Meine aktuellen Serializer Klassen EDIT: Das ist, was ich nach bitte bin.
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
Eines, was ich versuchte, - gibt es eine Antwort unten, dass diese Arbeit macht, aber es ist nicht wirklich das, was ich bin nach.
class PostSerializer < ActiveModel::Serializer
attributes :title, :topics
belongs_to :domain
belongs_to :user
def topics
# THIS WAS ANSWERED BELOW! THANK YOU
end
end
Vielen Dank! Das hat funktioniert. – alassiter
Ich habe diese Antwort geändert b/c hat sie eines der Probleme beantwortet, die ich vorgestellt habe. Ich wollte diese Frage nicht verwechseln, aber nachdem ich das gleiche Problem erneut angegangen war, wurde mir klar, dass ich nicht klar war. Ich bin mir der Etikette nicht sicher, also bitte vergib mir. Die Frage sollte dazu dienen, Attribute auf die Beziehung zu spezifizieren, siehe .. "Was ich will" und die Antwort hier erweitert sich auf eines der Dinge, die ich versuchte. Es funktioniert, aber was ich wirklich will, ist anders. – alassiter
Ich sehe in den Dokumenten kein gutes Beispiel dafür, also würde ich sagen, dass es nicht unterstützt wird oder nicht so funktioniert, wie Sie es möchten. Es scheint, als ob die Funktion, die eine Verknüpfung überschreibt, den Bereich und nicht die Attribute ändern soll. siehe hier https://github.com/rails-api/active_model_serializers#user-content-overriding-association-methods. Wenn Sie die zugehörigen Daten nicht in die Steuerung einbeziehen oder laden, führt dies nicht zu einem N + 1 im Serialisierer? Wenn Sie Postgres verwenden, können Sie JSON von der Datenbank zurückgeben oder die Daten in SQL massieren und einen benutzerdefinierten Serializer verwenden. – penner