2016-01-16 46 views
0

與此查詢:.includes與.order不使用單個查詢

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

你能告訴你如何循環? – Pavan

+0

'order('arrangements.id asc')'沒有參考安排表是否工作,因爲你是急切的加載安排? –

+0

我沒跟着。如果我添加了沒有'.includes(:arrangements)'的order子句,它會出錯。 – Catfish

回答

0

也許你應該增加更多的在包括哪些內容?

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

你需要傳遞arrangements(表名)references還有:

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