我正在使用will_paginate
2.3.x gem,我正在尝试获取WillPaginate :: Collection中所有对象的ID数组。是否有一种简单的方法可以迭代所有集合中的项目?使用ActiveRecord集合,这很简单:
all_ids = MyObject.find(:all).map { |o| o.id }
但是,在分页时,集合仅返回第一页中的N个元素:
not_all_ids = MyObject.paginate(:page => 1).map { |o| o.id }
我想要的是浏览集合中的所有页面。基本上,我正在寻找一种方法来检索下一页。有什么想法吗?感谢。
编辑 - 我正在使用rails 2.3。此外,我正在使用某些条件进行分页,但将其删除以简化:
MyObject.paginate(:conditions => [...], :include => [...], :page => 1)
答案 0 :(得分:2)
你可以这样做:
ids = MyObject.select("id").paginate(:page => 1)
if ids.total_pages > 1
(2..ids.total_pages).each do |page|
ids << MyObject.select("id").paginate(:page => page)
end
end
ids = ids.map(&:id)
但为什么在这种情况下使用paginate?
ids = MyObject.select("id").map(&:id)
会更快,并且将使用更少的资源...如果你的数据库包含10000个元素,并且你有时会迭代10次,那么你将为你的数据库制作1000个cals vs 1: - )
ps:我正在使用 .select(“id”),因此生成的请求是:
SELECT id from users;
VS
SELECT * FROM users;
我也使用了一个很好的快捷方式 map(&amp;:id),这相当于 .map {| o | o.id}