Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Nesting :json include in Rails

Tags:

I have three models:

class A < ActiveRecord::Base   has_many :bs end  class B < ActiveRecord::Base   has_one :c   belongs_to :a end  class C < ActiveRecord::Base   belongs_to :b end 

I want to get json data containing all B's and C's for an A. I tried a number of things similar to:

render json: @as, :include => [:bs => [:include=>[:c]] 

but nothing works. What would be a good way to do this.

like image 691
Ibrahim Muhammad Avatar asked Apr 02 '12 20:04

Ibrahim Muhammad


1 Answers

Refer to ActiveModel::Serializers::JSON#as_json to see the options you can pass to render :json. To quote:

To include associations use :include ...

Second level and higher order associations work as well:

user.as_json(:include => { :posts => {                              :include => { :comments => {                                              :only => :body } },                              :only => :title } }) # => { "id": 1, "name": "Konata Izumi", "age": 16, #      "created_at": "2006/08/01", "awesome": true, #      "posts": [ { "comments": [ { "body": "1st post!" }, { "body": "Second!" } ], #                   "title": "Welcome to the weblog" }, #                 { "comments": [ {"body": "Don't think too hard" } ], #                   "title": "So I was thinking" } ] #    } 

It's not necessary to call to_json or as_json directly, as render :json does it automatically.

like image 92
Jordan Running Avatar answered Sep 24 '22 01:09

Jordan Running