2011-01-27 6 views
7

Nel mio regolatore ho:alfabetizzare risultati di Dir.glob

@files = Dir.glob("public/downloads/*") 

A mio avviso ho:

<% @files.each do |f| -%> 
    <p><%= f.split("#{RAILS_ROOT}/public/downloads/")%></p> 
<% end -%> 

Come posso mettere i risultati in ordine alfabetico?

risposta

21

si dovrebbe essere in grado di solo:

@files = Dir.glob("public/downloads/*").sort 
+6

Grazie. Ho scoperto che quando si spinge un'app su Heroku Dir.glob si ottiene una matrice diversa rispetto al mio Mac a casa. la selezione del risultato era quindi essenziale per far funzionare la mia app. –

+1

Utente OSX qui. Funziona anche per l'ordinamento di file numerati come "test-1.jpg", "test-2.jpg", "prod-1.jpg", "prod-2.jpg", ecc. –

7

L'ordine dell'array Dir.glob rendimenti dipende dal sistema operativo in uso, come il the documentation Uniti. Nella maggior parte dei computer, questo è l'ordine che ci si aspetta, ma per esempio su heroku l'ordine è piuttosto arbitrario.

È possibile ordinare la matrice semplicemente concatenando sort alla chiamata del metodo esistente (Dir.glob("public/downloads/*").sort), come suggerito per la prima risposta. Tuttavia, se si utilizza il metodo più volte, può essere più conveniente per creare un intorno alias in ordine per Dir.glob per tornare sempre un array ordinato:

class Dir 
    class << self 
    alias :original_glob :glob 

    def glob(*args) 
     original_glob(*args).sort 
    end 
    end 
end 
Problemi correlati