我有一个模型的集合。我想对此集合执行一些复杂的排序逻辑。逻辑并不像基于简单属性排序那么简单。对模型集合执行复杂排序逻辑的最佳方法是什么(性能和可维护性方面)。我正在考虑将 block 传递给排序方法?但我不确定...
谢谢。
最佳答案
是的,您可以使用 sort_by
来使用 block
@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")
关于ruby-on-rails - ruby on Rails - 具有复杂逻辑的模型集合排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6671418/