ruby-on-rails - ruby on Rails - 具有复杂逻辑的模型集合排序

标签 ruby-on-rails ruby ruby-on-rails-3 sorting model

我有一个模型的集合。我想对此集合执行一些复杂的排序逻辑。逻辑并不像基于简单属性排序那么简单。对模型集合执行复杂排序逻辑的最佳方法是什么(性能和可维护性方面)。我正在考虑将 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/

相关文章:

ruby - 在 ruby​​ 中使用正则表达式计算字符串中数字和字符的长度

ruby-on-rails-3 - 通过 Carrierwave、mini-magick 和 ImageMagick 识别图像深度和打印尺寸

mysql - 在使用 Active Record 查询的最佳条件下哪种方式更好

ruby-on-rails - 具有多个版本的 Ruby 的 autospec

iphone - 是否有任何 gem 可以从 png 图像中读取 exif 数据

ruby-on-rails - Ruby on Rails Routes - get 和 match 之间的区别

ruby-on-rails - 使用Devise时如何获取用户上次活跃时间?

ruby-on-rails - 回形针,fog.io和Rackspace

ruby-on-rails - 寻找应用程序(ruby 2.3.8,rails 4.2.11)到最新稳定版本的 ruby​​ 和 rails 的推荐升级路径

mysql - 无法连接到本地服务器 : using rails server, 出现错误