2011-01-27 20 views
7

en mi controlador tengo:resultados en orden alfabético de Dir.glob

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

En mi punto de vista que tienen:

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

cómo puedo poner los resultados en orden alfabético?

Respuesta

21

usted debería ser capaz de simplemente:

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

Gracias. Descubrí que al presionar una aplicación en Heroku Dir.glob se obtiene una matriz ordenada de forma diferente que en mi Mac en casa. por lo tanto, ordenar el resultado fue esencial para que mi aplicación se ejecutara. –

+1

usuario de OSX aquí. Esto también funciona para clasificar archivos numerados como "test-1.jpg", "test-2.jpg", "prod-1.jpg", "prod-2.jpg", etc. –

7

El orden de la matriz Dir.glob rendimientos dependen del sistema operativo que utilice, como el the documentation estados. En la mayoría de las computadoras, este es el orden que esperarías, pero por ejemplo en heroku el orden es bastante arbitrario.

Puede ordenar la matriz encadenando sort a su llamada al método existente (Dir.glob("public/downloads/*").sort), como primera sugerencia sugerida. Sin embargo, si se utiliza el método varias veces, puede ser más conveniente para crear un alias en torno con el fin de Dir.glob para volver siempre una disposición ordenada:

class Dir 
    class << self 
    alias :original_glob :glob 

    def glob(*args) 
     original_glob(*args).sort 
    end 
    end 
end 
Cuestiones relacionadas