Active Storageを使用して添付ファイル(アップロード)を簡単に管理する
サーバーにアップロードされた添付ファイルは自前のテーブルでは管理せずに、RailsのActive Storageが削除などを自動的に管理します。
今回のデモプロジェクトでは、画像の表示からエクセル/PDFなどのファイルのダウンロードにも対応。
複数ファイル対応版は次回の記事を参照。
実行例
[エクセルファイル]
[画像ファイル]
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_one_attached :attachment end
:attachmentの名称は任意。
3. ビュー
[app/views/cats/_form.html.erb]
// 以下を追加する <div class="field"> <%= form.label "添付ファイル" %> <%= form.file_field :attachment %> </div>
[app/views/cats/show.html.erb]
// 以下を追加する <p> <strong>画像:</strong> <% if @cat.attachment.attached? && @Attachment_image%> <%= image_tag @cat.attachment %> <% end %> </p> <p> <strong>ダウンロード:</strong> <% if @cat.attachment.attached? %> <%= link_to "添付ファイル(" + @ext +")" ,rails_blob_path(@cat.attachment) %> <% end %> </p>
4. コントローラー
[cats_controller.rb]
// 必要な箇所のみ記述 def create @cat = Cat.new(cat_params) @cat.attachment = params[:cat][:attachment] 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].attachment = params[:cat][:attachment] @cat = @cat[0] if(!@cat.valid?) render :edit return end if @cat.save redirect_to @cat, notice: '更新しました。' else render :edit end end def show # ファイルの拡張子を判別する if @cat.attachment.attached? fullfilename = rails_blob_path(@cat.attachment) @ext = File.extname(fullfilename).downcase if @ext== ".jpg" || @ext== ".jpeg" || @ext== ".png" || @ext== ".gif" @Attachment_image = true else @Attachment_image = false end end end // 以下のように「:attachment」を追加する def cat_params params.require(:cat).permit(:name, :description, :attachment) end
プロジェクトの実行
アップロードされたファイルの場所は「プロジェクト名/storage」です。
参考URL
スポンサーリンク
関連記事
前の記事: | WSLのApache/MySQL(MariaDB)をWindows起動時に自動起動させる [WSL/Ubuntu環境] |
次の記事: | Active Storageを使用して添付ファイル(アップロード)を簡単に管理する [複数ファイル対応版] |
公開日:2019年12月15日 最終更新日:2020年08月01日
記事NO:02811