2015-08-19 242 views
2

我想使用自定義proc對一個collection進行排序。我知道Rails有順序方法,但我不相信這適用於procs,所以我只是使用sort_by。有人可以詳細談談我犧牲的速度,或建議替代方案嗎?我的理解是,順序的確切實現將取決於適配器(在我的情況下,這是mysql),但我想知道是否有辦法利用這個來加快排序。通過proc對Rails進行排序

舉個例子,我想這樣做:

Model.order(|m| m.get_priority) 

,但我不得不這樣做

Model.all.sort_by{|m| m.get_priority} 
+0

'get_priority'的解釋是什麼? –

+0

說模型「n」屬於模型「m」和「m」has_many「n」。 然後,get_priority是屬於m的一個實例的n的個數。 –

回答

3

sort_by在Ruby的層次上實現,它的紅寶石,而不是ActiveRecord的一部分。因此,排序不會被數據庫執行,而是被Ruby解釋器執行。

這不是一個最佳的解決方案,因爲DBMS通常更有效地排序數據,因爲它們可能會使用現有索引。

如果get_priority執行某種數據庫以外的計算,那麼你沒有很多的選擇你張貼在這裏的代碼,除非你想緩存get_priority的結果作爲Model表和排序的列使用將導致ORDER BY SQL語句的ActiveRecord order語句反對它。

+0

感謝Simone。你所說的幾乎是我所懷疑的,但我想要一個知道更多的人來確認它。現在我基本上必須決定是否需要速度,或者添加代碼來測量這個優先級狀態(正如您猜測的那樣,它涉及到與數據庫中其他實體的計算)。 –

相關問題