Randy Girard

Including methods and associations in a JSON Data set with Rails

I was poking around while working with creating an application specifically for web services. We decided to use JSON as the methods of transportation of data, but the problem came when I wanted to include custom methods, or associations in my data set. The solution was fairly simple, using the to_json method. Suppose you have the following classes:

class Client < ActiveRecord::Base
  has_many :employees
end

class Employee < ActiveRecord::Base
  belongs_to :client

  def full_name
    "#{first_name} #{last_name}"
  end
end

We want the controller to return a client with association employees and the full name in the database. Here is how we would go about doing that:

def show
  @client = Client.find(params[:id])

  respond_to do |format|
    format.json { render :json => @client.to_json(:include => { :employee => { :only => :email, :methods => [:full_name]}})}
  end
end

You will end up with the following data set:

{
  client: {
    name: "Some client",
    employee: {
      email: "test@test.com",
      full_name: "John Doe"
    }
  }
}

Forgive me if I messed up the json output…doing it from memory There are of course way easier uses for this too, but I just decided to spit out a more complex one.