0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Active Storage を使用した画像アップロード方法をまとめてみる。

Last updated at Posted at 2020-08-20

Active Storage とは…?

Active Storage とは、Ruby on Rails Ver.5.2 から実装されたファイルのアップロードをするための機能です。
Active Storage を使用することで、ローカルストレージへのファイルの保存はもちろん、Amazon S3,Google Cloud Storage,Microsoft Azure Storage といったクラウドストレージへのファイルのアップロードも簡単にすることができます。
これまでは、Carrierwave 等の Gem を利用してしていましたが、これからは Gem を使わずに Ruby on Rails の1つの機能としてファイルアップロード機能ができちゃうんです!

Active Storage をアプリケーションにインストールする。

  1. Active Storage をアプリケーションで使えるようにインストールするために以下のコマンドを入力します。
ターミナル
$ rails active_storage:install
  1. Active Storage が使用するテーブルをマイグレーションして作成します。
ターミナル
$ rails db:migrate
  • このコマンドによって、active_storage_blobsactive_storage_attachments というテーブルが作成されます。
    active_storage_blobs がアップロードしたファイルの情報を記録しているテーブル。active_storage_attachments はアプリケーションの該当するモデルと active_storage_blobs を繋ぐ中間テーブルです。

ファイルをアップロードするモデルを作成する。

  1. ファイルをアップロードするモデルを作成します。
ターミナル
$rails g model モデル名
  1. モデルと Active Storage が使用するテーブルとをアソシエーション(関連付け)します。
app/models/モデル名.rb
class モデル名 < ApplicationRecord
  has_one_attached :image
    # アップロードするファイルが 1枚のときは `has_one_attached` とします。
    # `:image` はビューファイルにてフォームヘルパーで指定するカラム名に応じて適宜 変更して下さい。

  has_many_attached :images
    # アップロードするファイルが 複数枚のときは `has_many_attached` とします。
    # `:images` はビューファイルにてフォームヘルパーで指定するカラム名に応じて適宜 変更して下さい。
end
  1. フォームから送信されたパラメータをストロングパラメータでテーブルへの保存を許可します。
app/controllers/●●●_controller.rb
class    Controller < ApplicationController
  private
    def   
      params.require(:モデル名).permit(:カラム名, :image)
        # アップロードするファイルが 1枚のときの記述です。
      params.require(:モデル名).permit(:カラム名, :images: [])
        # アップロードするファイルが複数枚のときはカラム名を空の配列にしておきます。
    end
end

【重要】 上述の説明で :image:images としているカラム名ですが、アプリケーションのモデルには :image:images といったカラムは作成しません。
ビューファイルのフォームから <%= form.file_field :image %> 等でファイルを送信してあげると自動的に active_storage_blobs に保存されて、active_storage_attachments により該当するモデルと関連付けられます。
これが Active Storage の便利なところであり、ちょっと厄介なところですね。

Active Storage を使用してアップロードしたファイルの保存先を設定する。

  1. config/environments/ ディレクトリにある production.rb (本番環境用) development.rb (開発環境用) test.rb (テスト環境用) の各ファイル内の config.active_storage.service の設定を変更します。
config/environments/production.rb,development.rb,test.rb
config.active_storage.service = :   
  # 設定したい保存先に合わせて `:local (ローカル環境)` `:amazon (Amazon S3)` `:google (Google Cloud Storage)` `:microsoft (Microsoft Azure Storage)` と記述します。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?