Вложенность: json включить в Rails
У меня есть три модели:
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]]
но ничего не работает. Что было бы хорошим способом сделать это.
Ответы
Ответ 1
Обратитесь к 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
делает это автоматически.
Ответ 2
Вам нужно передать хэш вместо массива
render :json => @as.to_json(:include => { :bs => {:include =>:c} })
Ответ 3
Try
render :json => @as.to_json(:include => {:bs => :c})
Ответ 4
Попробуйте следующее:
render json: @as.to_json(include:{bs: {include:{c:}}})
Ответ 5
Попробуйте следующее:
render json: @tiquets, :include => { :enterprise => {:include => { :location => {:only => :lo_name } },:only => :en_name } } }