订购以括号开头的记录

时间:2014-04-10 06:59:39

标签: ruby-on-rails special-characters

假设我的数据库中有一堆记录都有标题,soms可以以特殊字符开头。

records = Record.find(:all, :order => :title)
records.map{|record| record.title}
#=> ["(Ccc)", "Aaa", "Bbb", "Ddd", "_Eee_"]

下划线是最后的,但是括号显然被区别对待并且排在第一位。如何订购这些,以便以括号开头的记录也在最后?

#=> ["Aaa", "Bbb", "Ddd", "(Ccc)", "_Eee_"]

1 个答案:

答案 0 :(得分:0)

执行此操作的最佳方法是实现按所需顺序排序括号的排序规则。这是特定于数据库的;例如,this chapter描述了如何在MySQL中执行此操作。这需要一些努力,但不会在执行时间和存储空间中对您的应用程序造成任何处罚。

一种较差的方法是在Ruby中执行:拉出所有记录,然后使用自定义函数。关于它的坏处是你失去了通过数据库接口进行分页的能力,因为你需要Ruby中的完整集合才能使用。

中间(也可能是最简单)的方法是创建一个额外的列来转换您的标题,以便默认排序对它们进行正确排序,然后按该列排序标题。例如,如果您有Aaa, Bbb, Ddd, _(Ccc_), __Eee__作为标题订单列(即转义下划线和带有附加下划线的括号),则排序应该是正确的。