免責事項、私はRailsについてほとんど知りません。私は簡潔になるよう努めます。 Railsで次のモデル関係があるとします。
class ModelA < ActiveRecord::Base
belongs_to :ModelB
...
class ModelB < ActiveRecord::Base
has_many :ModelA
ModelAコントローラーのshowアクションを呼び出すと、返されるJSONは、問題のObjectAが子であるObjectBの子であるすべてのObjectAを表示する必要があります。
したがって、ID 1、2、3のObjectAを含むObjectBがある場合、次のようにアクセスします。/modela/1.json
私は見るべきです:
{
"modelb": {
"id": "1",
"modela": [insert the ModelA JSON for ID's 1, 2 and 3]
}
}
デフォルトでは、上記の例ではmodelb
を表すJSONのみが取得されます。しかし、Railsに他の関連オブジェクトも含めるように指示できます。
def export
@export_data = ModelA.find(params[:id])
respond_to do |format|
format.html
format.json { render :json => @export_data.to_json(:include => :modelb) }
end
end
エクスポートでそれらを表示したくない場合は、特定のフィールドを除外するように指示することもできます。
render :json => @export_data.to_json(:include => { :modelb => { :except => [:created_at, updated_at]}})
または、特定のフィールドのみを含めます。
render :json => @export_data.to_json(:include => { :modelb => { :only => :name }})
そして、それらを必要なだけ深くネストすることができます(ModelBにもhas_many ModelCがあるとしましょう):
render :json => @export_data.to_json(:include => { :modelb => { :include => :modelc }})
複数の子モデルの関連付けを含める場合は、以下を実行できます。
render :json => @export_data.to_json(include: [:modelA, :modelB, :modelN...])
Jsonをレンダリングするためのより柔軟なアプローチが必要な場合は、gem jbuilderの使用を検討できます。 https://github.com/Rails/jbuilder
カスタム属性、インスタンス変数、関連付けをレンダリングし、jsonパーシャルを便利な方法で再利用できます。