Ответ 1
По умолчанию вы получите только JSON, который представляет modelb
в приведенном выше примере. Но вы можете сказать 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...])