Active Storageを使用して添付ファイル(アップロード)を簡単に管理する [複数ファイル対応版]
アップロードする添付ファイルが1ファイルは前回の記事を参照。
実行例
複数のファイルをアップロードする。例では5ファイル。
1. 初期設定
前回の記事を参照した方は飛ばしてください。
// プロジェクトの生成 rails new . --skip-turbolinks --skip-action-mailer --skip-action-mailbox --skip-test -d mysql // データベースの設定 config/database.yml // Active Storageのインストール bin/rails active_storage:install // scaffold(スキャフォールド) bin/rails g scaffold Cat name:string description:text // マイグレーションの実行(テーブルの生成) bin/rails db:migrate
2. モデル
[app/models/cat.rb]
class Cat < ApplicationRecord has_many_attached :attachments end
:attachmentsの名称は任意。
3. ビュー
[app/views/cats/_form.html.erb]
// 以下を追加する <div class="field"> <%= form.label "添付ファイル(複数ファイル可)" %> <%= form.file_field :attachments, multiple: true %> </div>
[app/views/cats/show.html.erb]
// 以下を追加する <p> <strong>添付ファイル:</strong> <% if @cat.attachments.attached? %> <% @cat.attachments.each do |obj| %> <% url = rails_blob_path(obj) %> <br> <%= link_to URI.unescape(File.basename(url)),url %> <% end %> <% end %> </p>
4. コントローラー
[cats_controller.rb]
// 必要な箇所のみ記述 def create @cat = Cat.new(cat_params) @cat.attachments = params[:cat][:attachments] if @cat.save redirect_to @cat, notice: '登録しました。' else render :new end end def update @cat = Cat.where(id: params[:id]) @cat[0].name = params[:cat][:name] @cat[0].description = params[:cat][:description] @cat[0].attachments = params[:cat][:attachments] @cat = @cat[0] if(!@cat.valid?) render :edit return end if @cat.save redirect_to @cat, notice: '更新しました。' else render :edit end end def cat_params params.require(:cat).permit(:name, :description, attachments: []) end
プロジェクトの実行
アップロードされたファイルの場所は「プロジェクト名/storage」です。
参考URL
スポンサーリンク
関連記事
前の記事: | Active Storageを使用して添付ファイル(アップロード)を簡単に管理する |
次の記事: | Active StorageのダウンロードURLを変更する[/rails/active_storage/blobs] |
公開日:2019年12月15日 最終更新日:2020年08月01日
記事NO:02812