현재 하나의 큰 웹 응용 프로그램에서 작업 중이며 빠르게 작동하도록 모든 N + 1 쿼리를 리팩터링하기로 결정했습니다 (데이터베이스 요청 수를 줄이기 위해). , http://rails-bestpractices.com/posts/29-fix-n-1-queries). 그래서 저는 지금 Rails 3.1.1에서 작동하지 않는 보석 "총알"을 설치했습니다 (당신은 https://github.com/flyerhzm/bullet에서 포크를 사용할 수 있습니다). 각 페이지에 declarative_authorization 보석을 사용하는 경우 나 같은 경고를 얻을 :gem "bullet"을 사용하여 "declarative_authorization"gem에서 N + 1 쿼리 수정
N+1 Query detected
Role => [:permissions]
Add to your finder: :include => [:permissions]
N+1 Query detected
Permission => [:permission_rules]
Add to your finder: :include => [:permission_rules]
CACHE (0.0ms) SELECT "roles".* FROM "roles"
CACHE (0.0ms) SELECT "permissions".* FROM "permissions" WHERE "permissions"."role_id" = 1
CACHE (0.0ms) SELECT "permissions".* FROM "permissions" WHERE "permissions"."role_id" = 2
CACHE (0.0ms) SELECT "permissions".* FROM "permissions" WHERE "permissions"."role_id" = 3
CACHE (0.0ms) SELECT "permissions".* FROM "permissions" WHERE "permissions"."role_id" = 4
CACHE (0.0ms) SELECT "permissions".* FROM "permissions" WHERE "permissions"."role_id" = 6
CACHE (0.0ms) SELECT "permissions".* FROM "permissions" WHERE "permissions"."role_id" = 7
CACHE (0.0ms) SELECT "permissions".* FROM "permissions" WHERE "permissions"."role_id" = 8
CACHE (0.0ms) SELECT "permission_rules".* FROM "permission_rules" INNER JOIN "permission_rules_permissions" ON "permission_rules"."id" = "permission_rules_permissions"."permission_rule_id" WHERE "permission_rules_permissions"."permission_id" = 30
CACHE (0.0ms) SELECT "permission_rules".* FROM "permission_rules" INNER JOIN "permission_rules_permissions" ON "permission_rules"."id" = "permission_rules_permissions"."permission_rule_id" WHERE "permission_rules_permissions"."permission_id" = 31
...
는 당신이 좀 도와 주 시겠어요이 빠르게 조회 할 수 있나요?
이러한 경고를 발생시키는 Rails 앱의 실제 코드를 게시 할 수 있습니까? – Tilo