2017-11-30 4 views
0

私は2つのリソース-とauthorを持っています。 postauthorです。投稿の詳細を取得するときに、著者の詳細を選択的に含めることができます。Railsシリアライザ - 選択的なインクルード/除外を使用してアソシエーションの属性を制御する

例 -

GET /authors/1

{ 
    'id': 1, 
    'name': 'Some name', 
    'email': '[email protected]', 
    'address': 'Some address', 
    'mobile': '', 
    'language': 'ruby' 
} 

GET /posts/1

私が持っていると思います -

{ 
    'id': 1, 
    'created_at': '2017-01-01 10:00:00', 
    'views': 7500, 
    'seo_score': 4, 
    'author': { 
    'id': 1, 
    'name': 'Some name', 
    'email': '[email protected]' 
    } 
} 

代わりに、

{ 
    'id': 1, 
    'created_at': '2017-01-01 10:00:00', 
    'views': 7500, 
    'seo_score': 4, 
    'author': { 
    'id': 1, 
    'name': 'Some name', 
    'email': '[email protected]', 
    'address': 'Some address', 
    'mobile': '', 
    'language': 'ruby' 
    } 
} 
私は私が選択 includeexcludeを使用することにより、シリアライザにおける関連の属性を選択することができるかどうかを知りたい
  • onlyなど

  • 私は別のシリアライザおよびマップを書くことができます知っていますそれを定義する間にそれを関連に追加しますが、2つの特定の属性を含めるには、別のクラスを追加することは意味がありません。

  • また、関連付けをオーバーライドしてすべての属性をフェッチして、いくつかを選択することもできます。シリアライザがこれをデフォルトでサポートしているかどうかを知りたいと思います。

答えて

0

あなたはこの

belongs_to :author_with_partial_details, -> { select [:id, :name, :email] }, :class_name => "Author" 

のようなあなたの選択した列で新しい関連付けを作成し、この

のようなもの
Post.find(params[:id]).includes(:author_with_partial_details) 

また、あなたも、あなた自身を作成するために、JBuilderの宝石を使用することができ、それを使用することができますJSONの構造は、ここに宝石へのリンクですhttps://github.com/rails/jbuilder

+0

ありがとう、チェックし、応答します戻る。 –

+0

シリアライザでjsonを出力する方法を知りたいです。この答えは同じことを示しますが、モデルとコントローラを使用しています。 –

+0

シリアライザとjsonレスポンスを使用する方法を学ぶには、これが良い読書です。https://www.sitepoint.com/active-model-serializers-rails-and-json-oh-my/ – rajbir

関連する問題