如何将记录列为外部联接活动记录的json

时间:2016-04-26 11:45:23

标签: ruby-on-rails json jbuilder

我通过外连接和渲染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

这里我从属性表中获得了除外连接表之外的所有细节。如何在这里获得外部联接表结果

1 个答案:

答案 0 :(得分:0)

您需要调用@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查询