我有一个名为“票证”的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'
语法?
答案 0 :(得分:34)
将:order => 'criteria'
用于数据库可以完成的任何简单操作(即基本字母顺序或时间顺序)。假设您拥有正确的索引,可能比让Ruby代码更快地运行它。
我唯一认为你应该使用sort
方法的方法是,如果你有一个复杂的属性,它是在运行时计算的,而不是存储在数据库中,就像基于良好数量的'可信度值'一样/不良反应或其他什么。在这种情况下,最好使用sort
方法,但要注意,如果你有分页的话,这会搞砸(每个页面都会按顺序排列ITS结果,但整个页面的集合将是无序)。
答案 1 :(得分:2)
我在ActiveRecord查找程序或模型关联中指定了一个顺序,因为使用SQL排序更快。当您能够这样做时,您应该利用RDBMS提供的功能。