5

首先,一个警告:我对 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。

4

2 回答 2

4

在 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

更多信息可以在这里找到。

于 2013-04-01T20:17:43.077 回答
4

您真的真的不想在 ruby​​ 中进行这种排序,因为您将失去链接范围、对结果进行分页、limit正确使用等的能力。

这是 Postgres 特有的,但应该完全符合您的要求。

default_scope order("string_to_array(num, '.', '')::int[]")

SQL小提琴

Postgres 文档

于 2013-04-01T20:23:39.790 回答