Объектные отношения Rails и рендеринг JSON

Отказ от ответственности, я очень мало знаю о 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]
  }
}
44
задан Gavin Schulz 13 December 2011 в 22:45
поделиться

1 ответ

По умолчанию вы получите только 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...])
111
ответ дан 26 November 2019 в 21:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: