大量の写真を返すプロジェクトでDragonflyを使用しており、URLを最適化しようとしていました。現在、次のような画像のURLを取得しています。
これは256バイトを超えています。私は次のようなものが欲しいです:
http:// localhost:3000 / media / 1024 / 240x240_medium.jpg
それは以下に準拠しています:
/media/:id/:format
:format
DragonflyとRailsを使用して、一連の操作にマップし: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
各画像がになります(ただし、それ以外の場合は正常に機能します)。これをレンダリングとして処理することは可能ですか、それとも内部リダイレクトを行うことはできますか(つまり、クライアントが重複した要求を行う必要はありません)?