📝
Ruby on Rails ~ActiveStorageで画像を複数枚保存する方法
今日は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