2012-10-18 8 views
5

Ho una domanda nel mio file ruby:Conversione di un tipo mysql2 ad un array e di smistamento in rubino

@mastertest = connection.execute("select code_ver,date from mastertest") 

E io stampare il risultato della query, come di seguito:

@mastertest.each do |row| 
    puts row[0] : row[1] 
end 

Questo stampa tutte le code_ver e 'data', che assomiglia a questo

2.0 : 2012/12/10 
3.1 : 2012/11/03 
2.5 : 2012/07/08 
1.8 : 2012/12/11 
2.5 : 2012/03/01 

Ora voglio ordinare questo array in base alla mia 012.314.340,345 mila, ma il problema è che ruby ​​non considera questo come una matrice, dice che è un tipo mysql2.

Come procedere ulteriormente? Voglio convertire questa cosa in array 2-d o vorrei ordinarlo in base allo row[0].

risposta

7

Si ottiene un oggetto set di risultati MySQL in @mastertest e un set di risultati non è un array.

Se stai usando mysql2, allora si dovrebbe avere un Mysql2::Result e questo è Enumerable quindi ha un metodo to_a:

@mastertest.to_a.sort { ... } 

Se si sta utilizzando la mysql gemma, allora si dovrebbe avere un Mysql::Result e dovrete convertire @mastertest a un array a mano:

a = [ ] 
@mastertest.each { |r| a.push(...) } 
a.sort { ... } 

o si può semplicemente lasciare che il database di fare la cernita:

@mastertest = connection.execute('select code_ver, date from mastertest order by code_ver') 
+0

hey Vorrei utilizzare il secondo approccio in cui creo un array a mano. Puoi aiutarmi con la sintassi della conversione. –

+0

O anche nel primo approccio, quando faccio qualcosa come **@mastertest.to_a.sort {...} **. Cosa dovrebbe esserci tra parentesi se voglio ordinare sulla mia riga [0] o code_ver nella mia query. –

+0

@sagarvikani: Non sono sicuro di come debba essere la matrice in modo che non conosca l'aspetto "a mano". Prova la versione '@ mastertest.to_a' nella console e vedrai come appare la matrice, quindi puoi riempire il blocco' sort' (o forse anche usare 'sort_by'). –

Problemi correlati