我有以下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个查询。 –