我在我的rails项目中使用Ransack的sort_link来显示我的付款模型的费用列表。但是,'fee_amount'不是 payment 模型的属性,而是 bill 模型的类方法(属于付款)。我现在拥有的是:
<%= sort_link @search,:bill_fee_amount,“便利费”%>
应该访问当前付款的帐单并在帐单上调用'fee_amount'方法,该方法会执行一些计算并返回一个浮子。这是我希望搜索的浮标。
可以这样做,还是我只能根据我正在处理的模型的属性进行排序?
答案 0 :(得分:2)
你不能随便搜查,但请检查this issue。似乎有些人已经为这个功能做了补丁,但我还没有尝试过。
Ransack,在内部,它总是使用数据库中定义的模型,我无法使用范围创建的临时表。
PD:将评论作为答案重写,因为我总是回到这个问题:P答案 1 :(得分:0)
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想要搜索的名称中。
我希望有所帮助。