使用此查询:
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
答案 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)