我有一個模型的集合。我想在這個集合上執行一些複雜的排序邏輯。邏輯不像基於簡單屬性的排序那麼簡單。在一組模型上執行復雜排序邏輯的最佳方法(性能和可維護性)是什麼。我正在考慮在排序方法中傳遞一個塊?但我不知道...軌道上的紅寶石 - 複雜的邏輯排序模型集合
謝謝。
我有一個模型的集合。我想在這個集合上執行一些複雜的排序邏輯。邏輯不像基於簡單屬性的排序那麼簡單。在一組模型上執行復雜排序邏輯的最佳方法(性能和可維護性)是什麼。我正在考慮在排序方法中傳遞一個塊?但我不知道...軌道上的紅寶石 - 複雜的邏輯排序模型集合
謝謝。
是的,你可以使用使用sort_by
@people.sort_by { |person| person.age }
sort_by
塊使用Schwartzian transform在內部sort_by,所以如果你的邏輯是比這稍微複雜一些,你仍然可以創建一個打分函數,並將它傳遞到sort_by
@people.sort_by do |person|
tier = if person.deceased?
2
elsif !person.important?
1
else
0
end
[tier, person.age
end
問問自己,如果你不能直接從SQL查詢排序,這將是快了很多(假設正確的查詢和索引)
@people = Person.all(:select => "*, (age + popularity) as coolness", :order => "coolness")
我建議你閱讀this resource,本章具體爲:
#21 Using Procs for Filtering (matching_members.rb)
有使用特效,板塊給予了極大的過濾的例子。
PS:是的我會用塊,即使你的問題有點含糊。