使用ransack进行排序,通过关联和聚合方法

问题描述 投票:0回答:1

我在模型中有这样的联系

class User < ApplicationRecord
  has_many :support_user_orders, dependent: :destroy
end
class SupportUserOrder < ApplicationRecord
  belongs_to :user
end

我有一个显示一些信息的表格。我需要能够按“收费金额”排序,就像我按 id 排序一样,但如果我像使用 id 那样排序,则不起作用。

def index
  user_supports = TestNameQuery.call(period: params[:period])
  @ransack = user_supports.ransack(params[:q])
  @user_supports = @ransack.result
end
<tr>
  <th><%= sort_link @ransack, :id %></th>
  <th class="text-nowrap">Charged Amount</th>
</tr>

<tr class="bg-white">
  <td><%= link_to user_support.id, system_user_path(user_support) %></td>
  <td><%= user_support.support_user_orders.sum(:charged_amount) %></td>
</tr>

我尝试了这样的方法,但它不起作用

@user_supports = @ransack.result(distinct: true)

<th><%= sort_link @ransack, :charged_amount_sum, 'Charged Amount' %></th>

ruby-on-rails ransack
1个回答
0
投票

这对我有用。

ransacker :total_charged_amount do
    Arel.sql("(SELECT SUM(charged_amount) FROM support_user_orders WHERE support_user_orders.user_id = users.id)")
end
© www.soinside.com 2019 - 2024. All rights reserved.