Ich habe eine Rails 5 App, in der ich den Edelstein active_model_serializers
(https://github.com/rails-api/active_model_serializers) verwende. In meiner Anwendung habe ich ein Datenmodell vereinfacht, die etwa wie folgt aussieht:Rails API Design: beste Möglichkeit, andere Attribute mit json_api Beziehungen zu integrieren
# LocalizedString.rb
has_many :translations
# Translation.rb
belongs_to :localized_string
Ich versuche, die besten Praktiken von JSON API zu folgen, habe ich active_model_serializers
wie folgt konfiguriert:
ActiveModelSerializers.config.adapter = :json_api
Wenn ein Benutzer der API-Anfragen Übersetzungen (http://[root]/api/apps/117/translations
) bekomme ich zur Zeit folgendes Ergebnis:
{
"data": [
{
"id": "152",
"type": "translations",
"attributes": {
"value": "Test",
},
"relationships": {
"language": {
"data": {
"id": "1",
"type": "languages"
}
},
"localized-string": {
"data": {
"id": "162",
"type": "localized-strings"
}
}
}
},
[...]
aus meiner localised-string
I möchte auch ein anderes Attribut enthalten, das für den Konsumenten der API kritisch ist, und ich möchte keinen weiteren API-Aufruf machen müssen, um den Wert des Attributs zu erhalten. Ich frage mich, was ist die beste/empfohlene Weise, dies zu tun, die auch json_api
folgt, wenn möglich.
So etwas wie dies funktionieren könnte:
"localized-string": {
"data": {
"id": "162",
"key": "my key value", # the attribute I need.
"type": "localized-strings"
}
}
Aber ich bin nicht sicher, wie das active_model_serializers
Verwendung zu erreichen, oder ob es eine andere empfohlene Weg zu tun, was ich mit [json_api][1]
wollen.
Zur Vervollständigung meiner relevanten Serializer Dateien sucht lik dies:
class TranslationSerializer < ActiveModel::Serializer
attributes :id, :value, :created_at, :updated_at
has_one :language
has_one :localized_string, serializer: LocalizedStringParentSerializer
end
class LocalizedStringParentSerializer < ActiveModel::Serializer
# I want to include the key attribute in my relationship object, but this doesn't work.
attributes :id, :key
end
Also, alle Ideen auf, was ich tun muss, um zu erreichen, was ich will?