2011-11-04 19 views
6

Estoy tratando de elegir una imagen aleatoriamente desde un subdirectorio dentro de mi directorio /app/assets/images usando el comando Dir.glob(), y luego lo visualizo con un image_tag. De alguna manera no puedo hacer que funcione.¿Usando Dir.glob para listar activos en Rails 3.1?

Aquí está mi código:

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

que produce el siguiente error:

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

Como se puede ver la tubería de activos es la inserción de un "/" activos frente al directorio. Muy bien, Rails, te encontraré a mitad de camino aquí. Así que la próxima trato de quitar /app/assets de la ruta de consulta para hacer que funcione y obtener el siguiente resultado:

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

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

¿qué estoy haciendo mal aquí? ¡Gracias de antemano por tu ayuda!

Respuesta

7

Dir.glob va a devolver imágenes con una ruta relativa, por lo que su archivo produce.png será devuelto como:

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

Sin embargo, tiene que pasar sólo la parte badges/produce.png a image_tag. Es necesario eliminar el material antes de esto:

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

es posible que desee pegar esto en un ayudante lugar:

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

y luego en su opinión:

= random_badge 
+0

usted es un campeón ! ¡Gracias! – thoughtpunch

+0

¡Funciona! Gracias – Dmitri

Cuestiones relacionadas