ruby-on-rails – 为什么Ransack在每个循环中执行查询
发布时间:2020-12-17 02:10:13 所属栏目:百科 来源:网络整理
导读:我与所有成员一起搜索特殊群组: 控制器: class Groups::MembersController ApplicationController def index @group = Group.find_by_name(params[:groupname]) @search = @group.members.ransack(params[:q]) @members = @search.result().includes(:user
我与所有成员一起搜索特殊群组:
控制器: class Groups::MembersController < ApplicationController def index @group = Group.find_by_name(params[:groupname]) @search = @group.members.ransack(params[:q]) @members = @search.result().includes(:user).page(params[:page]).per(5) respond_to do |format| format.js format.html end end ... 模型: class Member < ApplicationRecord belongs_to :user belongs_to :group end 视图: ... - puts 'Out' - @members.each do |member| - puts 'In' - user = member.user - userShow = user_path(user) .list-group-item{id: member.id} ... 输出: Started GET "/groups/Test/members" for 127.0.0.1 at Processing by Groups::MembersController#index as HTML Parameters: {"groupname"=>"Test"} Group Load (0.0ms) SELECT "groups".* FROM "groups" WHERE "groups"."name" = ? LIMIT ? [["name","Test"],["LIMIT",1]] Rendering groups/members/index.html.haml within layouts/application Rendered layouts/nav/sidebar/_groups.html.haml (4.0ms) Out Member Load (0.0ms) SELECT "members".* FROM "members" WHERE "members"."group_id" = ? LIMIT ? OFFSET ? [["group_id",2],5],["OFFSET",0]] User Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."id" IN (15,24,48,9,4) In Member Load (0.0ms) SELECT "members".* FROM "members" WHERE "members"."group_id" = ? LIMIT ? [["group_id",11]] In CACHE Member Load (0.0ms) SELECT "members".* FROM "members" WHERE "members"."group_id" = ? LIMIT ? [["group_id",11]] Rendered groups/members/_index_list.html.haml (7068.8ms) (0.0ms) SELECT COUNT(*) FROM "members" WHERE "members"."group_id" = ? [["group_id",2]] Rendered groups/members/index.html.haml within layouts/application (7313.5ms) Rendered layouts/_head.html.haml (274.7ms) User Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT ? [["id",1],1]] Rendered layouts/header/_default.html.haml (7.0ms) Rendered layouts/_nav.html.haml (2.0ms) Rendered layouts/_flash.html.haml (14.0ms) Completed 200 OK in 7965ms (Views: 7931.9ms | ActiveRecord: 1.0ms) 我不明白为什么在每个循环中执行查询. 解决方法
我想你错了延迟的地方.使用一些时间戳检测代码并发布发生的情况:
- puts "before loop: #{Time.now.to_s(:utc)}" - puts 'Out' - @members.each do |member| - puts "In loop #{Time.now.to_s(:utc)}" - user = member.user - puts "after member.user call #{Time.now.to_s(:utc)}" - userShow = user_path(user) .list-group-item{id: member.id} - puts "End loop #{Time.now.to_s(:utc)}" (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |