ActiveStorageを用いて、画像を複数枚アップロードする
ActiveStorageは、Rails 5.2以降のみ利用可能。
Rails 5.2以降であれば、標準装備されております。
また、画像アップロード機能を実装する上でActiveStorageを利用される際は、画像を保存するためのカラムやテーブルをご自身で用意する必要はありません。
下記手順の中で自動生成されます。
本記事の対象
表題の通り、ActiveStorageを用いて、画像を複数枚アップロードする際の方法を手順を中心に説明しております。
手順
-
まずは、ターミナルにてActiveStorageをインストールするコマンドを入力。そして、マイグレート。
$ rails active_storage:install $ rails db:migrate //このマイグレーションによって、以下のテーブルが自動生成される。 * active_storage_blobs * active_storage_attachments
-
該当するモデル(今回はItemモデルとする)に has_many_attached :images と記述する。
この :imagesというのはファイル名です。こちらは好きな様に命名することができます。(models/Item.rb) class Item < ApplicationRecord has_many_attached :images end
-
次にコントローラーの編集を行う。
(controllers/items_controller.rb) def create @item = Item.create.params.require(:item).permit(:name, images: []) end //今回は画像を複数枚取り扱うため、「 images: [] 」と配列型で記述する必要があります。
-
フォームのtext_field内に手順2で記載したファイル名を記述する。
<%= form_with model: @item, local: true do |f| %> <%= f.file_field :images, multiple: true %> <%= f.submit %> <% end %> //multipleとは、複数の値を取得できる様にするオプションです。
以上が、ActiveStorageを用いて、画像を複数枚アップロードする手順となります。
フォームで送信されたファイルは、コントローラーのcreateアクションを介して、今回自動生成された2つのテーブルに保存されます。
参考
https://qiita.com/hmmrjn/items/7cc5e5348755c517458a
https://qiita.com/narikei/items/d20e64ce3ae5b45bfa2d