2011-11-04 10 views
6

Sto provando a scegliere un'immagine a caso da una sottodirectory all'interno della mia directory /app/assets/images utilizzando il comando Dir.glob() e quindi visualizzandola con un image_tag. In qualche modo non riesco a farlo funzionare.Utilizzare Dir.glob per elencare le risorse in Rails 3.1?

Ecco il mio codice:

- @badges = Dir.glob("app/assets/images/badges/*") 
= image_tag @badges.sample 

che produce il seguente errore:

ActionController::RoutingError (No route matches [GET] "/assets/app/assets/images/badges/produce.png"): 

Come si può vedere la pipeline bene è l'inserimento di un "/ attività" di fronte alla directory. Va bene Rails, ti incontrerò a metà strada qui. Così dopo ho provare a rimuovere /app/assets dal percorso di query per farlo funzionare e ottenere il seguente risultato:

- @badges = Dir.glob("images/badges/*") 
    = image_tag @badges.sample 

ActionController::RoutingError (No route matches [GET] "/assets"): 

che cosa sto facendo male qui? Grazie in anticipo per il vostro aiuto!

risposta

7

Dir.glob sta andando restituire le immagini con un percorso relativo, in modo che il file di produce.png verrà restituito come:

`app/assets/images/badges/produce.png` 

Tuttavia, è necessario passare solo la parte badges/produce.png a image_tag. È necessario rimuovere il materiale prima di questo:

= image_tag @badges.sample.gsub("app/assets/images/", "") 

si può decidere di attaccare questo in un aiutante invece:

def random_badge 
    badges = Dir.glob("app/assets/images/badges/*") 
    image_tag badges.sample.gsub("app/assets/images/", "") 
end 

e quindi a suo avviso:

= random_badge 
+0

Tu sei un campione ! Grazie! – thoughtpunch

+0

Funziona! Grazie – Dmitri

Problemi correlati