我尝试在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中的代码,但无法使其工作。
答案 0 :(得分:1)
你试过这个吗?
Model.all.sort_by { |instance| instance.name.split(/(\d+)/).map { |v| v =~ /\d/ ? v.to_i : v } }