我有一个名为票证的Rails应用程序示例,它可以查看和编辑出售给各个客户的虚构票证.在tickets_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结果,但整个页面的组合将会出现故障).