Overriding as_json has no effect?

Posted by Ola Tuvesson on Stack Overflow See other posts from Stack Overflow or by Ola Tuvesson
Published on 2010-05-27T21:01:12Z Indexed on 2010/05/28 2:41 UTC
Read the original article Hit count: 386

Filed under:
|
|
|

I'm trying to override as_json in one of my models, partly to include data from another model, partly to strip out some unnecessary fields. From what I've read this is the preferred approach in Rails 3. To keep it simple, let's say I've got something like:

class Country < ActiveRecord::Base
  def as_json(options={})
    super(
      :only => [:id,:name]
    )
  end
end

and in my controller simply

def show
  respond_to do |format|
    format.json  { render :json => @country }
  end
end

Yet whatever i try, the output always contains the full data, the fields are not filtered by the ":only" clause. Basically, my override doesn't seem to kick in, though if I change it to, say...

class Country < ActiveRecord::Base
  def as_json(options={})
    {foo: "bar"}
  end
end

...I do indeed get the expected JSON output. Have I simply got the syntax wrong?

© Stack Overflow or respective owner

Related posts about ruby-on-rails

Related posts about JSON