2016-07-02 14 views
3

私は宝石を使用するRails 5アプリを持っています。active_model_serializershttps://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 

だから、私は私が望むものを達成するために何をする必要があるか上の任意のアイデア?

答えて

2

仕様ごとに、リレーションシップはリソースオブジェクト識別子で表されます。 idと型以上の要素を含めるには、インクルードパラメータを使用します。 AMSでは、「include:[:ローカリゼーション]、フィールド:{ローカリゼーション:[:キー]} '(今はコンピュータではないが、ほぼ正しい)と思う。

関連する問題