2011-01-27 14 views
7

w moim kontrolera mam:wyniki alfabetycznie od Dir.glob

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

Moim zdaniem mam:

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

Jak mogę umieścić wyniki w porządku alfabetycznym?

Odpowiedz

21

Powinieneś być w stanie po prostu:

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

Dzięki. Zauważyłem, że po naciśnięciu aplikacji na Heroku Dir.glob otrzymuje się inną tablicę niż na moim Macu w domu. więc sortowanie wyniku było niezbędne, aby uruchomić aplikację. –

+1

Użytkownik systemu OSX tutaj. Działa to również w przypadku sortowania plików numerowanych, takich jak "test-1.jpg", "test-2.jpg", "prod-1.jpg", "prod-2.jpg" itp. –

7

Kolejność tablicy Dir.glob powraca zależy od używanego systemu operacyjnego, jak the documentation Zjednoczone. Na większości komputerów jest to kolejność, jakiej można się spodziewać, ale na przykład na heroku kolejność jest dość arbitralna.

Możesz po prostu posortować tablicę, łącząc sort z istniejącym wywołaniem metody (Dir.glob("public/downloads/*").sort), zgodnie z pierwszą sugerowaną odpowiedzią. Jednakże, jeśli używasz metody wiele razy, może być bardziej wygodne, aby utworzyć wokół aliasu w celu Dir.glob zawsze powrócić uporządkowanej tablicy:

class Dir 
    class << self 
    alias :original_glob :glob 

    def glob(*args) 
     original_glob(*args).sort 
    end 
    end 
end 
Powiązane problemy