Использование Dir.glob для перечисления активов в Rails 3.1? - PullRequest
6 голосов
/ 04 ноября 2011

Я пытаюсь выбрать изображение случайным образом из подкаталога внутри моего каталога /app/assets/images с помощью команды Dir.glob(), а затем отобразить его с помощью image_tag.Почему-то я не могу заставить его работать.

Вот мой код:

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

, который выдает следующую ошибку:

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

Как вы можете видеть активТрубопровод вставляет "/ assets" перед каталогом.Хорошо, Рэйлс, мы встретимся здесь на полпути.Итак, затем я пытаюсь удалить /app/assets из пути запроса, чтобы он заработал, и получить следующий результат:

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

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

Что я здесь не так делаю?Заранее спасибо за помощь!

1 Ответ

7 голосов
/ 04 ноября 2011

Dir.glob будет возвращать изображения с относительным путем, поэтому ваш файл produce.png будет возвращен как:

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

Однако вам нужно передать только часть badges/produce.png в image_tag.Вы должны удалить вещи до этого:

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

Вы можете вместо этого вставить это в помощник:

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

, а затем на ваш взгляд:

= random_badge
...