我有一个名为 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 结果,但整个页面集将无序)。