📝

Ruby on Rails ~ActiveStorageで画像を複数枚保存する方法

2023/06/19に公開

今日はActiveStorageで画像を複数枚保存する方法についてまとめます。
なお、ActiveStorageを使用する準備は整っているものとして話をすすめます。

アソシエーションの設定

複数枚の画像を紐づけたいモデルに対して、has_many_attachedメソッドを使用します。
また、ファイル名をimagesのように複数形にします。

class Post < ApplicationRecord
  has_many_attached :images
end

フォームの記述

画像の情報を配列の形でパラメーターへ送るため、name属性をpost[images][]のように設定します。
また、data属性を{index: 0}のように設定し、添付した画像に対してインデックス番号を付けてあげます。
仮にPostモデルの入力フォームに画像添付欄を2つ作るとしたら、下記のようになります。

<div class="image-field">
    <%= f.file_field :images, name: 'post[images][]', data: {index: 0} %>
    <%= f.file_field :images, name: 'post[images][]', data: {index: 1} %>    
</div>

ストロングパラメーターの記述

ストロングパラメーターで配列を受け取れるように編集します。
なお、images: []の記述を一番最後に書かないとエラーが発生しますので注意。

private
  def post_params
    params.require(:post).permit(:text, {images: []})
  end

画像を表示したい時

ビューで画像を表示したい時は、インデックス番号を追加してあげればOKです。

<%= image_tag post.images[0] %>

Discussion