Ruby on rails 3 Rails:调用页面条目信息时,分页是否会运行额外的SQL查询
我的应用程序使用rails'3.2.20',mysql2'0.3.20',并将分页为'3.0.7' 我正在尝试加载用户记录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
@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'