Active Storage で複数枚画像を削除する方法
ActiveStorage で画像を複数枚削除する方法
Rails 5.2 で Active Storage が gem 使わずとも添付ファイルが実装できるため使用している。
Rails ガイド を見ると1つのオブジェクトに対して複数の画像を添付することができる has_many_attached
という機能がある。
これは非常に便利なのだが削除に関しては、has_one_attached
の場合(オブジェクトに対して1つの添付ファイルがある場合)のみしか記されていなかったため、ここに残しておく。
添付ファイルが1つの場合の削除
ガイドを見ると以下のように記されている。
# 物理削除 @user.avatar.purge
複数添付ファイルを削除する
以下のように書くとできた。
改めて見ると直感的にかけそうでした…
まずは view 。 アルバムというモデルの更新画面があるとするとこんな感じです。
<%= form_with model: @album, local: true do |form| %> <p>現在登録されている画像(削除するものはチェックしてください)</p> <% @album.images.each do |image| %> <%= form.check_box :image_ids, {:multiple => true}, image.id, false %> <%= image_tag image, :size=>"100x100" %> <br> <% end %> <% end %> <%= form.submit %>
これにより params[:album][:image_ids]
に削除するファイルの ID が入る。
次に controller 側。 送られてきた ID のファイルを1つずつ削除しておくだけ。
params[:album][:image_ids].each do |image_id| image = @album.images.find(image_id) image.purge end