我有以下Rails代碼,其中它技術上最多做兩個查詢,但由於某種原因,控制檯顯示三個不同的查詢,如下面的屏幕截圖所示。我的問題是爲什麼它會在沒有必要時運行SELECT "pages".* FROM "pages"
查詢?爲什麼Rails會運行額外的不必要查詢?
查詢
page = Page.includes(:page_roles)
page.where(is_deleted: false).index_by(&:name)
page_results = {}
page.each do |entry|
result_entry = entry.as_json;
result_entry['page_roles'] = entry.page_roles
page_results[entry.name] = result_entry
end
控制檯輸出
Page Load (0.0ms) SELECT "pages".* FROM "pages" WHERE "pages"."is_deleted" = $1 [["is_deleted", false]]
PageRole Load (0.5ms) SELECT "page_roles".* FROM "page_roles" WHERE "page_roles"."page_id" IN (1, 2, 3, 4)
Page Load (0.5ms) SELECT "pages".* FROM "pages"
CACHE (0.0ms) SELECT "page_roles".* FROM "page_roles" WHERE "page_roles"."page_id" IN (1, 2, 3, 4)
Completed 200 OK in 117ms (Views: 16.9ms | ActiveRecord: 17.0ms)
請從控制檯輸入代碼,無法辨認。 – Iceman
對不起,更新了問題 –
它實際上是4個查詢。 –