6

我在我的 rails 项目中使用 Ransack 的 sort_link 来显示我的付款模式的费用列表。但是,“fee_amount”不是支付模型的属性,而是账单模型(属于支付)的类方法。我目前拥有的是:

<%= sort_link @search, :bill_fee_amount, "便利费" %>

它应该访问当前付款的账单并调用该账单上的“fee_amount”方法,该方法进行一些计算并返回一个浮点数。我希望通过这些花车进行搜索。

可以这样做,还是我只能按我正在处理的模型的属性排序?

4

2 回答 2

2

你不能用它来洗劫,但检查这个问题。似乎有些人已经为这个功能做了补丁,但我还没有尝试过。

Ransack,在内部,它总是使用数据库中定义的模型,我不能让它使用范围创建的临时表。

PD:重新修改评论作为答案,因为我总是回到这个问题:P

于 2013-05-30T00:55:43.603 回答
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 想要搜索的名称中。

我希望这会有所帮助。

于 2013-01-27T07:24:11.993 回答