如何以不同方式排序字符串列

时间:2009-03-06 19:10:14

标签: ruby-on-rails ruby

我有一个像这样的has_many协会:

has_many  :respostas_matriz_alternativas, :class_name => 'RespostaMatrizAlternativa',
          :order => 'respostas_matriz.codigo asc',
          :include => :resposta_matriz

重要的片段就是“秩序”。 Codigo是一个varchar列,在大多数情况下将包含数值。为了显示这些数据,我需要通过代码对它进行排序,但是当我只有数字时,顺序变得很尴尬,例如:

1,10,11,12,13,14,15,16,17,18,19,2,20 ......

你建议我解决它?

感谢。

3 个答案:

答案 0 :(得分:4)

我不知道如果列中包含字符串和数字的混合,你可以做很多事情,但如果列总是数字,你可以使用类似的东西:

:order => 'cast(respostas_matriz.codigo as unsigned) asc'

答案 1 :(得分:3)

接受的答案适用于SQLite但不适用于PostgreSQL,我不得不使用其中一种内置类型来实现与不同数据库相同的结果:

order: 'cast(respostas_matriz.codigo as integer) asc'

答案 2 :(得分:0)

我只是Ruby的初学者,但是你可以使用类似下面的内容将字符串拆分成一个较小的字符串数组,然后将每个字符串转换为整数。

我面前没有我的rubydoc,但是像

那样
:order => 'respostas_matriz.codigo.split.map {|s| s.to_i}'