Отказ от ответственности, я очень мало знаю о Rails. Я постараюсь быть кратким. Учитывая следующие отношения модели в Rails:
class ModelA < ActiveRecord::Base
belongs_to :ModelB
...
class ModelB < ActiveRecord::Base
has_many :ModelA
При вызове действия show контроллера ModelA возвращаемый JSON должен показать все ObjectAs, которые являются дочерними для ObjectB, для которого рассматриваемый ObjectA является дочерним.
Так что если я иметь ObjectB, который содержит ObjectA с ID 1, 2 и 3, а затем доступ: /modela/1.json
I должен видеть:
{
"modelb": {
"id": "1",
"modela": [insert the ModelA JSON for ID's 1, 2 and 3]
}
}
По умолчанию вы получите только JSON, который представляет modelb
в вашем примере выше. Но вы можете указать Rails включить и другие связанные объекты:
def export
@export_data = ModelA.find(params[:id])
respond_to do |format|
format.html
format.json { render :json => @export_data.to_json(:include => :modelb) }
end
end
Вы даже можете указать ему исключить определенные поля, если не хотите видеть их в экспорте:
render :json => @export_data.to_json(:include => { :modelb => { :except => [:created_at, updated_at]}})
Или включить только определенные поля:
render :json => @export_data.to_json(:include => { :modelb => { :only => :name }})
И вы можете вложить их так глубоко, как вам нужно (допустим, ModelB также имеет_множество ModelC):
render :json => @export_data.to_json(:include => { :modelb => { :include => :modelc }})
Если вы хотите включить несколько ассоциаций дочерних моделей, вы можете сделать следующее:
render :json => @export_data.to_json(include: [:modelA, :modelB, :modelN...])