ホーム > カテゴリ > Ruby・Ruby on Rails >

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

プロジェクトの実行

http://localhost:3000/cats

アップロードされたファイルの場所は「プロジェクト名/storage」です。

参考URL

Active Storage の概要





関連記事



公開日:2019年12月15日 最終更新日:2020年08月01日
記事NO:02812


この記事を書いた人

💻 ITスキル・経験
サーバー構築からWebアプリケーション開発。IoTをはじめとする電子工作、ロボット、人工知能やスマホ/OSアプリまで分野問わず経験。

画像処理/音声処理/アニメーション、3Dゲーム、会計ソフト、PDF作成/編集、逆アセンブラ、EXE/DLLファイルの書き換えなどのアプリを公開。詳しくは自己紹介へ
プチモンテ代表、アーティスト名:プチモンテ
🎵 音楽制作
BGMは楽器(音源)さえあれば、何でも制作可能。歌モノは主にロック、バラード、ポップスを制作。歌詞は叙情詩、叙情的な楽曲が多い。楽曲制作は2023年12月中旬 ~

オリジナル曲を始めました✨

YouTubeで各楽曲を公開しています🌈
https://www.youtube.com/@petitmonte

【男性ボーカル】DA・KA・RA | 新たな明日が風と共に訪れる

【男性、女性ボーカル】時空を超越する先に | 時空と風の交響曲

【女性、男性ボーカル】絆 | 穏やかな心に奏でる旋律