Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to convert records including 'include' associations to JSON

If I do something like:

result =  Appointment.find( :all, :include => :staff )
logger.debug { result.inspect }

then it only prints out the Appointment data, and not the associated staff data. If I do result[0].staff.inpsect then I get the staff data of course.

The problem is I want to return this to AJAX as JSON, including the staff rows. How do I force it to include the staff rows, or do I have to loop through and create something manually?

like image 847
99miles Avatar asked Apr 02 '10 15:04

99miles


2 Answers

:include is an argument for to_json, not find. What you need to do in your controller is this:

def return_json
  @appointment = Appointment.find(:all)
  respond_to { |format|
    format.json { render :json => @appointment.to_json(:include => :staff) }
  }
end

You need to setup an association between Appointment and Staff for this to work.

like image 55
Alex Korban Avatar answered Oct 07 '22 15:10

Alex Korban


Check out ActiveRecord::Serialization and ActionController::Base (see section: "Rendering JSON")

def show
  @appointment = Appointment.find(:all, :include => :staff)
  respond_to do |format|
    format.html
    format.js { render :json => @appointment.to_json(:methods => [:staff]) }
  end
end
like image 41
maček Avatar answered Oct 07 '22 14:10

maček