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

时间:2009-03-18 10:12:07

标签: ruby-on-rails sorting

我有一个名为“票证”的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'语法?

2 个答案:

答案 0 :(得分:34)

:order => 'criteria'用于数据库可以完成的任何简单操作(即基本字母顺序或时间顺序)。假设您拥有正确的索引,可能比让Ruby代码更快地运行它。

我唯一认为你应该使用sort方法的方法是,如果你有一个复杂的属性,它是在运行时计算的,而不是存储在数据库中,就像基于良好数量的'可信度值'一样/不良反应或其他什么。在这种情况下,最好使用sort方法,但要注意,如果你有分页的话,这会搞砸(每个页面都会按顺序排列ITS结果,但整个页面的集合将是无序)。

答案 1 :(得分:2)

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