2012-10-18 9 views
5

Mam kwerendy w moim pliku RubyKonwersja typu mysql2 do tablicy i sortowania go w Ruby

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

I wydrukować wynik kwerendy jak poniżej:

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

ten wypisze wszystkie code_ver i „data”, który wygląda tak

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 

teraz chcę sortować tej tablicy na podstawie mojego code_ver, ale problemem jest to, że ruby ​​nie traktuje tego jako tablicy, ale mówi, że jest to typ mysql2.

Jak przejść dalej? Chcę albo przekonwertować tę rzecz na 2-d tablicę, albo chciałbym ją posortować na podstawie row[0].

Odpowiedz

7

Otrzymujesz obiekt zestawu wyników MySQL w @mastertest, a zestaw wyników nie jest tablicą.

Jeśli używasz mysql2, to trzeba mieć Mysql2::Result a to Enumerable więc ma to_a metody:

@mastertest.to_a.sort { ... } 

Jeśli używasz mysql gem, a następnie trzeba mieć Mysql::Result i musisz przekonwertować @mastertest do tablicy ręcznie:

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

Albo może po prostu niech baza zrobić sortowanie:

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

hej Chciałbym skorzystać z drugiego podejścia, w którym tworzę tablicę ręcznie. Czy możesz mi pomóc ze składnią konwersji? –

+0

Nawet w pierwszym podejściu, gdy robię coś w stylu **@mastertest.to_a.sort {...} **. Co powinno znajdować się w nawiasach, jeśli chcę sortować w moim wierszu [0] lub code_ver w moim zapytaniu. –

+0

@sagarvikani: Nie jestem pewien, jak chcesz wyglądać w twojej tablicy, więc nie wiem, jak wyglądałaby metoda "od ręki". Wypróbuj wersję '@ mastertest.to_a' w konsoli, a zobaczysz, jak wygląda tablica, a następnie wypełnij blok" sort "(a może nawet użyj" sort_by "). –