ActiveAdmin按关联对象的属性总和排序

时间:2017-07-26 10:34:14

标签: ruby-on-rails activeadmin

我的Ruby on Rails应用程序中有以下模型,我使用的是Postgres数据库:

class Sale < ApplicationRecord
  has_many :line_items
end

class LineItem < ApplicationRecord
  belongs_to :sale
end

现在我想要实现两件事:

首先,我想在ActiveAdmin for Sales中创建一个索引页面,因此我可以针对每次销售显示订单项价格的总和。

我已经尝试过的,但效果不佳(速度非常慢):

ActiveAdmin.register Sale do
  actions :index
  remove_filter :line_items

  index do
    column :created_at
    column :price do |sale|
      sale.line_items.sum(:price)
    end
  end
end

其次,我想让这个专栏排序 - 是否可能?

2 个答案:

答案 0 :(得分:0)

我对你的案例的建议你可以只分组sales_id,然后将价格与下面的方法相加,反向会让你降序

LineItem.group(:sale_id).sum(:price).sort_by{|k, v| v}.reverse

如果您需要前十名,您可以先使用(10)

LineItem.group(:sale_id).sum(:price).sort_by{|k, v| v}.reverse.first(10)

答案 1 :(得分:0)

尝试总结价格的registering a database viewdocumentation on custom sorting仍应适用。这些提示和技巧的链接可以在wiki上找到。