Ошибка маршрутизации: не найдено ни одного маршрута [GET] /image/my_image.png
Я генерирую теги изображений из одной из моих моделей, и я не могу заставить Rails одновременно создавать рабочие URL-адреса как в режиме разработки, так и в режиме разработки. Я начал с этого в одной из моих моделей:
def traffic_light_icon(size=15)
image_tag "/assets/#{size}/#{traffic_colour}.png"
end
(Я получаю доступ к image_tag с include ActionView::Helpers::AssetTagHelper
.)
Это хорошо работало в разработке, но в производственной среде ссылка не была автоматически обновлена с соответствующим хешем для получения изображения из конвейера ресурсов. Если я попытаюсь использовать форму
image_tag "#{size}/#{traffic_colour}.png"
вместо этого (как предлагают различные источники), тогда он даже не работает в процессе разработки - я получаю ошибку маршрутизации (нет совпадений с маршрутом [GET] /image/15/amber.png).
Что я делаю неправильно?
1 ответ
По сути, ответ - не используйте image_tag внутри модели, даже если вы нашли способ взломать, чтобы получить к нему доступ. Чтобы создать правильный контекстно-зависимый URL, помощнику необходим доступ к данным сеанса, которые недоступны из моделей. Это приводит к тому, что Rails создает тег изображения, но плохо, который не будет работать во всех ситуациях (в моем случае, в разработке, но не в производстве).
Существует хорошая информация о том, когда и как использовать помощники внутри моделей и контроллеров в Railscast 132 (с несколькими советами относительно того, когда не нужно или когда нужно искать проблемы, которые это вызывает).