2012-10-01 46 views
6

我在我的rails項目中使用Ransack的sort_link來顯示我的付款模型的費用列表。然而,'fee_amount'不是付款模型的屬性,而是賬單模型(其屬於付款)的類別方法。我有什麼目前:使用Ransack sort_link非屬性

<%= sort_link @search,:bill_fee_amount, 「便利費」 %>

應該訪問當前支付法案並調用'fee_amount'方法賬單,它做一些計算並返回一個浮點數。這是我希望搜索的這些浮標。

可以這樣做,還是我只能根據我正在處理的模型的屬性進行排序?

回答

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希望搜索的名稱一起包含。

我希望有幫助。

+2

檢查這個[問題](https://github.com/ernie/ransack/issues/61)。 Ransack沒有與meta_search相同的功能。在內部,它始終使用數據庫中定義的模型,並且無法使用由範圍創建的臨時表 –

2

您不能隨身攜帶搜索引擎,但請檢查this issue。似乎有些人已經爲這個功能做了補丁,但我沒有嘗試過。

Ransack,在內部,它始終使用數據庫中定義的模型,並且我無法使其使用由範圍創建的臨時表。

PD:返工作爲答案的評論,因爲我總是回到這個問題:P