Я использую Dragonfly в проекте, который возвращает большой поток фотографий, и хотел оптимизировать URL-адреса. В настоящее время я получаю URL-адреса изображений, например:
Это более 256 байт. Я хотел бы что-то вроде:
http://localhost:3000/media/1024/240x240_medium.jpg
Это соответствует:
/media/:id/:format
Как мне добавить это при использовании Dragonfly и Rails, чтобы :format
отображалось в цепочке операций, а :id
использовалось для поиска модели или изображения? Спасибо!
Изменить:
Я добавил пользовательский 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
для каждого изображения (но в остальном работает нормально). Можно ли обработать это как рендеринг или каким-то образом выполнить внутреннее перенаправление (т.е. не требовать от клиента дублирования запросов)?