Forum: Ruby on Rails How to Include Associations in #as_json

Posted by Ari King (abking)
on 2012-09-28 20:40
Hi,

Does anyone know how to include nested associations when overriding a
model's #as_json method?

Below is my attempt to include direct and nested associations.

NOTE: "office" is a direct association, "company" is nested association
via "office". I'd like both included in the generated json output.



  def as_json(options={})
    super(:include => [{:office => {:only => [:company, :street, :city,
:state, :zip_code]}}])
  end


Thanks.

-Ari
Posted by Gary Weaver (garysweaver)
on 2012-09-28 21:10
(Received via mailing list)
to_json and as_json are not what you are probably looking for.

If you are using a decently up-to-date version of Rails, look at:

https://github.com/josevalim/active_model_serializers

That is what is going to be used in Rails 4.

If you want Hypermedia (links to resources, etc.), HAL support, etc. to 
be
more REST-driven, check out roar-rails, but note that adoption is not 
that
heavy yet: https://github.com/apotonick/roar-rails

Prior to those, a good option was RABL, and it is still a good option 
for
some probably, although I'm not sure what it can do that you'd want over
active_model_serializers: https://github.com/nesquena/rabl

I spent a good amount of time wrangling with as_json and overriding it 
on
ActiveModel::Base like:
https://github.com/garysweaver/restful_json/blob/a...

And to answer your question- methods is a good way of including
associations and whatever else you want to define that can be calculated 
on
the model. But, please don't use as_json unless you really need to.

Note: Mass assignment security (attr_accessible/attr_protected) is going
away in Rails 4. Also, there is a lot wrong with the implementation that
I'd developed that I'm trying to fix now.

Good luck.
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.