首先,一个警告:我对Ruby和Rails很陌生。
我的模型中有一个字符串字段,它引用了我的客户端的现有离线命名方案,它们是以小数分隔的整数。所以“1.1”和“5.10.1.5”等等。
我想使用Rails的默认范围排序,但只是这个字段的正常排序会导致这样的问题:
1 1.10 1.2 1.3
显然,我希望1.10在最后排序。有人能指出我正确的方向吗?
我正在使用Rails 3.2.10和Postgres 9.1.4。
答案 0 :(得分:4)
你真的不想在ruby中进行这种排序,因为你将失去链接范围,分页结果,正确使用limit
等等的能力。
这是Postgres特有的,但应该完全符合你的要求。
default_scope order("string_to_array(num, '.', '')::int[]")
答案 1 :(得分:3)
有多种方法可以在Ruby中对这类事物进行排序,但这里有一种可能性(来自Matthias Reitinger在ruby-forum上的帖子):
arr = arr.sort_by do |x|
x.split(".").map {|i| i.to_i}
end
arr
是您的数组。
这最终将这些数字排序为(至少从Ruby 1.8.7开始):
1.1
1.2
1.9
1.10
可以找到更多信息here。