你通常如何在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。