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