整体的需求是这样的,User 表关联了一张支付的 payment 表,现在要将当月所有支付过用户按照支付总金额的从多到少排列展示,前十名用户还需要在展示的过程中追加 top1~10; 我在处理的时候是先查询 payment 表中的数据,找到当月的支付过的用户,然后根据用户去展示数据,其支付金额我在 user 的 modle 中写了一个计算金额的方法; 但是在页面显示中,我却无法将用户的展示按照金额的大小排列,其排列顺序默认是按照 user 表的 id 来排列的。我也曾按照简书中的方法去处理这些数据,但是这样又带来了一个新的问题,就是无法进行分页了。我现在很迷茫,谁有好点的方法能够帮到我吗?
代码如下,整体的需求就是这样。
def active_organizations
start_date = params[:start_time]
end_date = params[:end_time]
records = Record.where(data_source: '交易订单').with_date_range(start_date,end_date)
record_id = records.uniq.pluck(:organization_id)
payments = Payment.pay_succeed.with_date_range(start_date,end_date)
payment_id = payments.uniq.pluck(:organization_id)
organizations = Organization.where(id: (record_id+payment_id).uniq)
amount = organizations.map { |e| [e.id,records.where(organization_id: e.id).sum(:amount).abs + payments.where(organization_id: e.id).sum(:amount).abs] }
ids = amount.sort{|a,b|b[1] <=> a[1]}.map { |e| e[0] }
@organizations = organizations.find(ids).index_by(&:id).slice(*ids).values
end