2009-03-06 6 views
1

j'ai une association has_many comme ceci:Comment commander les colonnes de chaîne différente

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

Eh bien, le fragment qui compte est le « ordre ». Codigo est une colonne varchar qui contiendra dans la plupart des cas des valeurs numériques. Pour afficher ces données, je dois le commander par code, mais quand je n'ai que des chiffres, l'ordre devient maladroit, quelque chose comme:

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

Que proposez-vous pour moi de le résoudre?

Merci.

Répondre

4

Je ne sais pas qu'il ya beaucoup que vous pouvez faire si la colonne contient un mélange de chaînes et de chiffres, mais si la colonne sera toujours numérique, vous pouvez utiliser quelque chose comme:

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

Je Je suis juste un débutant avec Ruby, mais pourriez-vous utiliser quelque chose comme ce qui suit pour diviser la chaîne en un tableau de chaînes plus petites, puis convertir chaque chaîne en un entier.

Je n'ai pas mon rubydoc devant moi, mais quelque chose comme

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

La réponse acceptée fonctionne pour SQLite mais pas PostgreSQL, je devais utiliser l'un des types intégrés pour atteindre le même résultat avec différentes bases de données:

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