我通过外连接和渲染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
这里我从属性表中获得了除外连接表之外的所有细节。如何在这里获得外部联接表结果
答案 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