.includes与.order不使用单个查询

时间:2016-01-16 17:15:37

标签: ruby-on-rails activerecord

使用此查询:

cases = Case.includes(:arrangement)

我可以遍历所有案例并获取排列值,而不会在每次调用case.arrangement.id时生成更多查询

使用此查询:

cases = Case.includes(:arrangement).order('arrangements.id asc')

当我循环遍历所有案例并获得排列值时,它会运行另一个查询来加载该案例的排列记录。

如何使用.includes以及排列列进行排序,并且每次调用case.arrangement.id时都不会运行单独的查询?

以下是我在运行查询后循环的方式:

cases_array = []
cases.each_with_index do |caseObj, i|
  json_case = caseObj.as_json
  json_case = json_case.merge(
    :arrangement_id => caseObj.arrangement.try(:id),
    :arrangement_location => caseObj.arrangement.try(:location).try(:name),
    :arrangement_datetime => view_context.spell_date_and_time(
      caseObj.arrangement.try(:timeslot).try(:timeslot)))
  cases_array[i] = json_case
  puts json_case
end

2 个答案:

答案 0 :(得分:0)

也许你应该在你的包含中添加更多内容?

cases = Case.includes(arrangement: [:location, :timeslot]).order('arrangements.id asc')

答案 1 :(得分:0)

您还需要将arrangements (表格名称)作为references传递:

cases = Case.includes(:arrangement).order('arrangements.id asc').references(:arrangements)