gpt4 book ai didi

ruby-on-rails - Will_Paginate - 如何获取所有分页对象 ID 的数组?

转载 作者:行者123 更新时间:2023-12-02 02:21:46 25 4
gpt4 key购买 nike

我正在使用 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)

最佳答案

你可以这样做:

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)

但为什么在这种情况下使用分页?

ids = MyObject.select("id").map(&:id)

会更快,并且会使用更少的资源......如果你的数据库包含 10000 个元素并且你一次迭代 10 个,你将对你的数据库进行 1000 次调用 vs 1 :-)

ps: 我正在使用 .select("id") 所以生成的请求是:

SELECT id from users;

对比

SELECT * FROM users;

我还使用了一个很好的快捷方式 map(&:id),这相当于 .map { |o| o.id

关于ruby-on-rails - Will_Paginate - 如何获取所有分页对象 ID 的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7792679/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com