#Active Storage
#####Active Storageとは
Active Storageとはファイルをアップロードしてモデルに添付してくれるやつ。Active Storageをインストールして使用することで本番環境でクラウドストレージサービス(S3、GCSとか)にファイル(画像とか)をアップロードして、データベース上でActiveRecordモデル(アプリで使うモデル)のインスタンスに紐付けできるということ。
#####手順
Active Storageをgemを使ってインストール
↓
するとmigrationファイルができる。これは2つのテーブル(モデル)を作るためにできた(active_storage_blobsとactive_storage_attachmentsという名前)。
一つ目のactive_storage_blobsは画像ファイルを管理するためのモデル。
二つ目のactive_storage_attachmentsはActiveRecordモデル(アプリで使うモデル)とactive_storage_blobsの関係性を表すためのモデル。つまりこの二つのモデルの間に存在し、二つのモデルに従属(belong_to)しているテーブル。
上記で説明をしてきたがActiveStorageで画像を紐づける際にこの二つのモデルを意識することは少ない?
↓
db:migrateする
↓
ActiveRecordモデル(appで使用するモデル)ファイルに写真を持つことを記述する
has_one_attached :image
#一つのtaskに一つのimageがつく。
#imageという名前は入力時のform fieldでのタグ名。
= form_with model: task, local: true do |f|
.
.
.
.form-group
= f.label :image
= f.file_field :image, class: 'form-control'
#imageというタグ名で値を送信している
他にもモデルファイルで以下のように記述するとモデルは複数の画像を持つことができる。
class Message < ApplicationRecord
has_many_attached :images
end
参考文献はRailsガイドと【Rails 5.2】 Active Storageの使い方
#####設定
・画像ファイルを管理する場所を指定したい
そんな時はconfig/environmentsで各環境での管理場所を指定する。
config.active_storage.service = :local
#開発環境ではファイルを保存する場所をlocalという設定にしている。
localがどういう設定になっているかを知りたい場合は
local:
service: Disk
root: <%= Rails.root.join("storage") %>
#localという設定はファイルの保存はアプリのstorogeディレクトリで行われる