gpt4 book ai didi

ruby-on-rails - 如何为定义的页面和记录总数选择数据?

转载 作者:数据小太阳 更新时间:2023-10-29 07:04:43 25 4
gpt4 key购买 nike

我有一个包含分页数据的表格,这是我为每个页面选择数据的方式:

@visitors = EventsVisitor
.select('visitors.*, events_visitors.checked_in, events_visitors.checkin_date, events_visitors.source, events_visitors.id AS ticket_id')
.joins(:visitor)
.order(order)
.where(:event_id => params[:event_id])
.where(filter_search)
.where(mode)
.limit(limit)
.offset(offset)

此外,为了构建表格分页,我需要知道记录总数。目前我对此的解决方案非常粗糙:

total = EventsVisitor
.select('count(*) as count, events_visitors.*')
.joins(:visitor)
.order(order)
.where(:event_id => params[:event_id])
.where(filter_search)
.where(mode)
.first()
.count

所以我的问题如下 - 为当前页面和记录总数选择有限数据的最佳 ruby​​ 方法是什么?

我注意到如果我执行 @visitors.count - 将生成额外的 sql 查询:

SELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM `events_visitors` INNER JOIN `visitors` ON `visitors`.`id` = `events_visitors`.`visitor_id` WHERE `events_visitors`.`event_id` = 1 LIMIT 15 OFFSET 0) subquery_for_count 

首先,我不明白为什么要发送额外的查询来获取我们已经拥有的数据的计数,我的意思是在我们从 @visitors 中的数据库中获取数据之后我们可以使用 ruby​​ 对其进行计数,而无需向 DB 发送额外的查询。

其次 - 我认为也许有一些方法可以使用类似 .total_count 的东西来生成类似的 count(*) 查询但没有那个无用的 limit/偏移量?

最佳答案

你应该排除 limit 和 offset http://guides.rubyonrails.org/active_record_querying.html#except .看看 kaminari 是如何做到的 https://github.com/kaminari/kaminari/blob/92052eedf047d65df71cc0021a9df9df1e2fc36e/lib/kaminari/models/active_record_relation_methods.rb#L11

所以它可能是这样的

total = @visitors.except(:offset, :limit, :order).count

关于ruby-on-rails - 如何为定义的页面和记录总数选择数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14227761/

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