У меня есть приложение Rails 5, в котором я использую драгоценный камень active_model_serializers
(https://github.com/rails-api/active_model_serializers). В моем приложении у меня есть упрощенная модель данных, которая выглядит примерно так:Rails API Design: лучший способ включить другие атрибуты с отношениями json_api
# LocalizedString.rb
has_many :translations
# Translation.rb
belongs_to :localized_string
Я пытаюсь следовать передовой опыт JSON API, я настроил active_model_serializers
так:
ActiveModelSerializers.config.adapter = :json_api
Когда пользователь перевода запросов API (http://[root]/api/apps/117/translations
) в настоящее время я получаю следующий результат:
{
"data": [
{
"id": "152",
"type": "translations",
"attributes": {
"value": "Test",
},
"relationships": {
"language": {
"data": {
"id": "1",
"type": "languages"
}
},
"localized-string": {
"data": {
"id": "162",
"type": "localized-strings"
}
}
}
},
[...]
от моего localised-string
I также хочу включить другой атрибут, который является критическим для потребителя API, и я не хочу, чтобы другой вызов API получил значение атрибута. Интересно, что это лучший/рекомендуемый способ сделать это, что также следует за json_api
, если это возможно.
Что-то подобное может работать:
"localized-string": {
"data": {
"id": "162",
"key": "my key value", # the attribute I need.
"type": "localized-strings"
}
}
Но я не знаю, как добиться того, чтобы с помощью active_model_serializers
или, если это еще один рекомендуемый способ делать то, что я хочу с [json_api][1]
.
Для завершения, мои соответствующие serialiser файлы выглядит Лик это:
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
Таким образом, любые идеи о том, что мне нужно сделать, чтобы достичь того, чего я хочу?