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_amountPayment残念ながら、それはおそらくそれよりもはるかに悪いことであり、厄介な SQL 計算をモデルに含める必要があると思います。

私が思う重要なポイントは、SQL に並べ替え対象の列を含める必要があるため、SQL にそれを計算させ、Ransack が検索したい名前に含める必要があるということです。

それが役立つことを願っています。

于 2013-01-27T07:24:11.993 に答える