Вложенность: json включить в Rails - PullRequest
15 голосов
/ 03 апреля 2012

У меня есть три модели:

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

Я хочу получить данные json, содержащие все B и C для A. Я пробовал несколько вещей, подобных:

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

но ничего не работает.Что было бы хорошим способом сделать это.

Ответы [ 5 ]

35 голосов
/ 03 апреля 2012

См. ActiveModel::Serializers::JSON#as_json, чтобы увидеть опции, которые вы можете передать render :json. Цитировать:

Чтобы включить ассоциации, используйте :include ...

Также работают ассоциации второго уровня и высшего порядка:

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" } ]
#    }

Нет необходимости вызывать to_json или as_json напрямую, поскольку render :json делает это автоматически.

7 голосов
/ 03 апреля 2012

Вам нужно передать хеш вместо массива

render :json => @as.to_json(:include => { :bs => {:include =>:c} })
2 голосов
/ 03 апреля 2012

Попробуйте

render :json => @as.to_json(:include => {:bs => :c})
0 голосов
/ 16 февраля 2017

Попробуйте это:

render json: @tiquets, :include => { :enterprise => {:include => { :location => {:only => :lo_name } },:only => :en_name } } }
0 голосов
/ 17 апреля 2012

Попробуйте это:

render json: @as.to_json(include:{bs: {include:{c:}}})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...