Как указать запись как json для активной записи внешнего соединения

я создал активную запись через внешнее соединение и рендеринг json. когда я визуализирую это, я не получаю данные внешней объединенной таблицы. как его получить

@recent_details = Property
  .includes(:space_amenities,:event_suitabilities,:purpose_suitabilities,:venue_categories)
  .where(id: params[:id])
render json: @recent_details

вот как я визуализировал форму index.jbuiler.json

json.recent_details @recent_details

здесь я получил все детали из таблицы свойств, кроме таблиц внешнего соединения. как получить результаты внешней объединенной таблицы здесь


person SreRoR    schedule 26.04.2016    source источник
comment
попробуйте визуализировать json: Property.includes(:space_amenities,:event_suitabilities,:цель_подходит,:venue_categories).где(id: params[:id]).to_json   -  person Chakreshwar Sharma    schedule 26.04.2016
comment
я пробовал так. но на этот раз я получаю сведения о свойствах плюс сведения только об одной таблице соединений, которая является последней (цель_подходит). Любая идея, как добавить все   -  person SreRoR    schedule 26.04.2016
comment
' response_to do |format| format.json { render :json =› @recent_details.to_json(include: :space_amenities,:event_suitabilities,include: :purpose_suitabilities) } end`.   -  person SreRoR    schedule 26.04.2016


Ответы (1)


вам нужно вызвать что-то вроде @recent_details.frist.space_amenities, чтобы получить данные, includes фактически запросит данные для вас, но он не объединит все данные вместе. просто когда вы вызываете @recent_details.first.space_amenities, база данных больше не будет запрашивать, потому что includes уже запросил вас. в вашем случае вам нужно указать, какие столбцы вы хотите добавить к вашему результату json. Например:

json.recent_details @recent_details do |rd|
  json.space_amenities rd.space_amenities
end

у этого не будет проблемы с запросом n + 1

если вы удалите includes(:space_amenities,:event_suitabilities,:purpose_suitabilities,:venue_categories), тот же код будет иметь проблему с запросом n + 1, вы увидите в журнале вашего сервера, что для каждого recent_detail выполняется несколько запросов sql.

person Zhiliang Xing    schedule 26.04.2016