私は宝石を使用するRails 5アプリを持っています。active_model_serializers
(https://github.com/rails-api/active_model_serializers)です。私のアプリでは、私はこのような何かに見える簡略化されたデータモデルがあります:私はJSON APIからのベストプラクティスに従うことをしようとしているRails APIデザイン:json_api関係で他の属性を含める最も良い方法
# LocalizedString.rb
has_many :translations
# Translation.rb
belongs_to :localized_string
を、私はこのようなactive_model_serializers
を設定している:
ActiveModelSerializers.config.adapter = :json_api
私localised-string
Iから
{
"data": [
{
"id": "152",
"type": "translations",
"attributes": {
"value": "Test",
},
"relationships": {
"language": {
"data": {
"id": "1",
"type": "languages"
}
},
"localized-string": {
"data": {
"id": "162",
"type": "localized-strings"
}
}
}
},
[...]
:APIリクエスト翻訳の利用者(http://[root]/api/apps/117/translations
)私は現在、次のような結果を得ますまた、APIのコンシューマーにとって重要な別の属性を含める必要があり、属性の値を取得するために別のAPI呼び出しを行う必要はありません。可能であれば、json_api
の後に続くこれを行うための最良の/推奨される方法は何か疑問です。このような
何か仕事ができる:
"localized-string": {
"data": {
"id": "162",
"key": "my key value", # the attribute I need.
"type": "localized-strings"
}
}
しかし、それは私が[json_api][1]
で何をしたいことのもう一つのお勧めの方法である場合、私はactive_model_serializers
を使用していることを実現するかどうかはわかりませんか。完了するために
、私の関連するシリアライザファイルは、このリクなります
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
だから、私は私が望むものを達成するために何をする必要があるか上の任意のアイデア?