Я использую Dragonfly в проекте, который возвращает большой поток фотографий и ищет способы оптимизации URL-адресов. В настоящее время я получаю URL изображений, например:
http://localhost:3000/media/BAhbCFsHOgZmSSJgZmRlL2ZkZTAxYzQ0LTM4Y2UtNGU0ZS1iOWRlLWUwZmUxNWUwN2JmMC83Mzk1NmZlMC05ZTA5LTQzNWUtODUyMC00MzFlYzQxMzQ1OTQvb3JpZ2luYWwuanBlZwY6BkVUWwg6BnA6CnRodW1iSSIMMjQweDI0MAY7BkZbCTsHOgxjb252ZXJ0SSIQLXF1YWxpdHkgODAGOwZGMA/240x240.jpg
Что превышает 256 байтов. Я хотел бы что-то вроде:
http://localhost:3000/media/1024/240x240_medium.jpg
Это соответствует:
/media/:id/:format
Как мне добавить это при использовании Dragonfly и Rails таким образом, чтобы :format
отображался в цепочку операций, а :id
использовался для поиска модели или изображения? Спасибо!
Edit:
Я добавил пользовательский Mime::Type
для каждого нужного мне формата, и у меня работает следующее:
# config/routes.rb
match "/photos/:id/:style", to: "photos#show", as: :media
# app/controllers/photos_controller.rb
def show
@photo = Photo.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.jpg { cache('public', 86400); redirect_to @photo.url(params[:style], 'jpg') }
format.png { cache('public', 86400); redirect_to @photo.url(params[:style], 'png') }
format.gif { cache('public', 86400); redirect_to @photo.url(params[:style], 'gif') }
end
end
# app/views/photos/show.html.erb
<%= image_tag media_path(id: @photo.id, style: 'small', format: 'png') %>
Однако это приводит к 302
для каждого изображения (но в остальном работает нормально). Можно ли обработать это как визуализацию или как-то сделать внутреннее перенаправление (то есть не требовать, чтобы клиент делал повторяющиеся запросы)?