Francis's Octopress Blog

A blogging framework for hackers.

Rails Object Relationships and JSON Rendering

Rails Object Relationships and JSON Rendering

class ModelA < ActiveRecord::Base   belongs_to :ModelB

  …

class ModelB < ActiveRecord::Base   has_many :ModelA

When calling the show action of the ModelA controller the returned JSON should show all ObjectAs that are children of the ObjectB of which the ObjectA in question is a child of.

By default you’ll only get the JSON that represents modelb in your example above. But, you can tell Rails to include the other related objects as well:

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

You can even tell it to exclude certain fields if you don’t want to see them in the export:

render :json => @export_data.to_json(:include => { :modelb => { :except => [:created_at, updated_at]}})

Or, include only certain fields:

render :json => @export_data.to_json(:include => { :modelb => { :only => :name }})

And you can nest those as deeply as you need (let’s say that ModelB also has_many ModelC):

render :json => @export_data.to_json(:include => { :modelb => { :include => :modelc }})