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