你通常如何在Rails中对项目进行排序?

我有一个小例子Rails应用程序叫做票证,它可以查看和编辑出售给各个客户的虚构票证。 在ticket_controller.rb中,在def index ,我有这个标准行,由scaffolding生成:

 @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结果,但整个页面组合将会出现故障) 。

我在ActiveRecord查找器或模型关联中指定了一个顺序,因为使用SQL进行排序更快。 当您能够这样做时,您应该利用RDBMS提供的function。