Ruby on rails 3 Rails:调用页面条目信息时,分页是否会运行额外的SQL查询

Ruby on rails 3 Rails:调用页面条目信息时,分页是否会运行额外的SQL查询,ruby-on-rails-3,ruby-on-rails-3.2,rubygems,will-paginate,Ruby On Rails 3,Ruby On Rails 3.2,Rubygems,Will Paginate,我的应用程序使用rails'3.2.20',mysql2'0.3.20',并将分页为'3.0.7' 我正在尝试加载用户记录 @users = User.paginate(:page => params[:page], :per_page => 20) 下面是在控制台中执行的查询 User Load (0.3ms) SELECT `users`.* FROM `users` LIMIT 20 OFFSET 0 (0.3ms) SELECT COUNT(*) FROM `users

我的应用程序使用rails'3.2.20',mysql2'0.3.20',并将分页为'3.0.7'

我正在尝试加载用户记录

@users = User.paginate(:page => params[:page], :per_page => 20)
下面是在控制台中执行的查询

User Load (0.3ms)  SELECT `users`.* FROM `users` LIMIT 20 OFFSET 0
(0.3ms)  SELECT COUNT(*) FROM `users` 
通常情况下,paginate将运行两个查询来查询集合和计数

但当我在视图中使用page\u entries\u info时,我又得到了一个额外的查询

User Load (0.3ms)  SELECT `users`.* FROM `users` LIMIT 20 OFFSET 0
(0.3ms)  SELECT COUNT(*) FROM `users` 
User Load (0.2ms)  SELECT `users`.* FROM `users` LIMIT 1 OFFSET 0
希望最后一个查询没有在任何地方使用

我只是用一个简单的例子来说明,但我的应用程序执行带有更多连接和包含的大型查询

它可能会由于不必要的查询而降低性能

这仅在将“3.0.3”分页后发生


这是错误/功能吗?如何避免此额外查询?

为了防止will\u paginate生成自己的计数查询,请使用total\u entries参数:

@users = User.all
entries = @users.size
@users.paginate(:page => params[:page], :per_page => 20, :total_entries => entries)

will\u paginate
正在进行额外的查询,因为rails延迟执行查询。以下是该计划的实施情况:

def page_entries_info(collection, options = {})
  model = options[:model]
  model = collection.first.class unless model or collection.empty? # <= this line
  ...
end
page_entries_info @users, model: 'user'