例えばユーザーのプロフィール画像で使用している際、
models/user.rb
class User < ActiveRecord::Base
...
mount_uploader :image, ImageUploader
end
/users/:id/edit
にアクセスするとform
のファイル選択ボックス(file_field)
には前回アップロードした画像は設定されていないので、この状態でupdate(PATCH/PUT /users/:id)
を行うと前回アップロードした画像が消えてしまう。
image_cacheを追加する
既に画像が存在する場合はキャシュを作成する
controllers/users_controller.rb
# GET /users/1/edit
def edit
@user.image.cache! unless @user.image.blank?
end
画像をアップロードするViewでhiddenタグにキャッシュを追加する
views/users/edit.html.erb
<%= f.label :image, "画像" %>
<%= f.file_field :image %>
<%= f.hidden_field :image_cache %>
Strong Parametersへ:image_cache
を追加後updateすると
画像を変更していない場合は、前回アップロードした画像は消えない。