【问题标题】:How to list record as json for outer join active record如何将记录列为外部连接活动记录的 json
【发布时间】:2016-04-26 11:45:23
【问题描述】:

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

在这里,我从属性表中获取了所有详细信息,但外部连接表除外。如何在此处获取外部联接表结果

【问题讨论】:

  • 尝试渲染 json: Property.includes(:space_amenities,:event_suitabilities,: purpose_suitabilities,:venue_categories).where(id: params[:id]).to_json
  • 我试过这样。但这次我得到的只是属性详细信息加上一个连接表详细信息,这是最后一个(目的_适合性)。知道如何添加所有
  • ' response_to do |format| format.json { render :json => @recent_details.to_json(include: :space_amenities,:event_suitabilities,include: : purpose_suitabilities) } end`.

标签: ruby-on-rails json jbuilder


【解决方案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查询

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-02
    • 1970-01-01
    • 2017-09-17
    • 1970-01-01
    • 2014-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多