ActiveRecord:如何通过包含字母和数字的属性对模型集合进行排序

时间:2015-11-28 04:15:05

标签: ruby-on-rails sorting activerecord

我尝试在Rails中对对象集合进行排序,并且因为Name值包含字母和数字,Model.all.order(:name)不能按预期工作(例如, apple10 来自 apple9 )。

如果输入数组,http://www.bofh.org.uk/2007/12/16/comprehensible-sorting-in-ruby的示例代码可以解决我的问题:

["apple10","banana20","banana3","apple9"].sort_by { |key| key.split(/(\d+)/).map { |v| v =~ /\d/ ? v.to_i : v } }

=> ["apple9", "apple10", "banana3", "banana20"]

如何在ActiveRecord中应用该代码(或类似代码),例如:

Model.all.sensible_sort(:name)

我尝试在帮助器,控制器和模型定义中使用the above URL中的代码,但无法使其工作。

1 个答案:

答案 0 :(得分:1)

你试过这个吗?

Model.all.sort_by { |instance| instance.name.split(/(\d+)/).map { |v| v =~ /\d/ ? v.to_i : v } }