当我开始在我的开发日志中看到SELECT COUNT(*)
电话时,我现在无法追踪,但它正在发生并且似乎没有理由。我想知道这是否正常和/或为什么会发生这种情况。我不认为这是一个主要问题,但如果我不需要它,为什么要额外调用数据库。
在我的控制器中我有
def some_action
@activities = user.activities
end
在User
课程中,我有has_many :activities
当我调用此操作时,我的日志输出是
User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
(0.3ms) SELECT COUNT(*) FROM "activities" WHERE "activities"."user_id" = 1
Activity Load (0.3ms) SELECT "activities".* FROM "activities" WHERE "activities"."user_id" = 1
我可以肯定地告诉你的是,它没有用来做那个SELECT COUNT(*)
电话,据我所知,没有什么可以试图得到这个数字。
我正在使用Rails 3.2.6和PostgreSQL 9。
答案 0 :(得分:1)
我发现计数查询的原因是由于Rails的延迟加载以及我使用我的数据的顺序。
当我遍历所有@activities
时,我在视图模板中对实例变量做的第一件事是检查是否有任何要经过。如果不是,我会向用户显示不同的内容。
@activities.empty?
正在执行计数并将其与0进行比较,这比将所有记录加载到数组然后检查它更有效。我可以选择将我的行动改为
@activities = user.activities.all
在构造视图之前阻止COUNT调用并加载所有记录。