views:

20

answers:

1

First off, I am not using Rails. I am using Sinatra for this project with Active Record.

I want to be able to override either to_json or as_json on my Model class and have it define some 'default' options. For example I have the following:

class Vendor < ActiveRecord::Base
  def to_json(options = {})
    if options.empty?
      super :only => [:id, :name]
    else
      super options
    end
  end
end

where Vendor has more attributes than just id and name. In my route I have something like the following:

@vendors = Vendor.where({})
@vendors.to_json

Here @vendors is an Array vendor objects (obviously). The returned json is, however, not invoking my to_json method and is returning all of the models attributes.

I don't really have the option of modifying the route because I am actually using a modified sinatra-rest gem (http://github.com/mikeycgto/sinatra-rest).

Any ideas on how to achieve this functionality? I could do something like the following in my sinatra-rest gem but this seems silly:

@PLURAL.collect! { |obj| obj.to_json }
+1  A: 

Try overriding serializable_hash intead:

def serializable_hash(options = nil)
  { :id => id, :name => name }
end

More information here.

Brian Deterling
exactly what I need. I like the fact that I could also add in properties that aren't attributes as well. Thanks a ton!
mikeycgto