我在我的 rails 项目中使用 Ransack 的 sort_link 来显示我的付款模式的费用列表。但是,“fee_amount”不是支付模型的属性,而是账单模型(属于支付)的类方法。我目前拥有的是:
<%= sort_link @search, :bill_fee_amount, "便利费" %>
它应该访问当前付款的账单并调用该账单上的“fee_amount”方法,该方法进行一些计算并返回一个浮点数。我希望通过这些花车进行搜索。
可以这样做,还是我只能按我正在处理的模型的属性排序?
我在我的 rails 项目中使用 Ransack 的 sort_link 来显示我的付款模式的费用列表。但是,“fee_amount”不是支付模型的属性,而是账单模型(属于支付)的类方法。我目前拥有的是:
<%= sort_link @search, :bill_fee_amount, "便利费" %>
它应该访问当前付款的账单并调用该账单上的“fee_amount”方法,该方法进行一些计算并返回一个浮点数。我希望通过这些花车进行搜索。
可以这样做,还是我只能按我正在处理的模型的属性排序?
Ransack 是 MetaSearch 的继承者,根据 MetaSearch 文档,您可以创建自定义搜索。这是链接:
https://github.com/ernie/meta_search
我认为这样的事情会起作用:
scope :sort_by_bill_fee_amount_asc, joins(:bill).select('sum("bills"."fee_amount") AS bill_fee_amount').order('bill_fee_amount ASC')
scope :sort_by_bill_fee_amount_desc, joins(:bill).select('sum("bills"."fee_amount") AS bill_fee_amount').order('bill_fee_amount DESC')
这个问题不清楚计算究竟是什么,所以我认为它只是一个名为fee_amount. 不幸的是,它可能比这更糟糕,我认为讨厌的 SQL 计算需要包含在Payment模型中。
我认为的关键点是 SQL 需要包含您正在排序的列,因此您需要让 SQL 计算它并将其包含在 Ransack 想要搜索的名称中。
我希望这会有所帮助。