Skip to main content
 首页 » 编程设计

ruby-on-rails之你通常如何在 Rails 中对项目进行排序

2024年10月25日19zhwl

我有一个名为 Tickets 的 Rails 应用程序示例,它可以查看和编辑出售给不同客户的虚构门票。在 ticket_controller.rb 中,内部 def index ,我有这个标准线,由脚手架生成:

@tickets = Ticket.find(:all) 

要按名称对门票进行排序,我找到了两种可能的方法。你可以这样做:
@tickets = Ticket.find(:all, :order => 'name') 

……或者这样:
@tickets = Ticket.find(:all).sort!{|t1,t2|t1.name <=> t2.name} 

(提示:Ruby 文档解释说 sort! 将修改它正在排序的数组,而不是单独的 sort,它返回已排序的数组但保持原始数组不变)。

你通常使用什么策略?你什么时候用.sort!:order => 'criteria'句法?

请您参考如下方法:

使用 :order => 'criteria'对于任何可以由数据库完成的简单事情(即基本的字母顺序或时间顺序)。假设您有正确的索引,它可能比让您的 Ruby 代码执行此操作要快得多。

我唯一一次认为您应该使用 sort方法是如果您有一个在运行时计算而不存储在数据库中的复杂属性,例如基于好/坏响应数量的“可信度值”或其他东西。在这种情况下,最好使用 sort方法,但请注意,如果您有分页,这会搞砸(每个页面都会按顺序显示 ITS 结果,但整个页面集将无序)。