🔥
【Rails】ActiveStorageの特徴
PF作成にてテーブル作成時に認識があやふやだったので特徴を振り返ろうと思います。
ここでは特徴の確認のため導入方法については割愛されます。
ActiveStorageとは
Railsで画像の投稿や表示を行うためのものです。画像は通常のカラムとして保存できないため、特別な保存方法が必要になり、それを行うのがActiveStorageです。
ActiveStorageの特徴
- 画像用のカラムを用意する必要がない
- 画像を保存させるために紐づいているモデルに対して保存用のカラムを持たせる必要がない。
- usersテーブルにカラムを追加する必要がない
ActiveStorageは、アセット(ファイル)がデータベースに直接格納されず、ストレージに保存される仕組みが採用されているため、画像用のカラムを用意する必要がないとのことです。
Active Storageを使うことで、複数のバックエンドストレージを組み合わせて使用することも可能になります。
登録された画像はどこでどのように登録されているか
導入時に作成されるテーブル
ActiveStorage導入時に下記のテーブルが自動作成されます。
-
active_storage_attachments
モデルレコードとの紐付きを保存する、中間テーブル -
active_storage_blobs
実際に画像をカラムに保持しているテーブル
下記の記述通りactive_storage_blobsの中にmetadata
というカラムがありその中に画像が文字列のデータ
として格納されています。
schema.rb
create_table "active_storage_blobs", force: :cascade do |t|
:
t.text "metadata"
:
end
画像レコードとモデルの紐付けの仕組み
active_storage_attachmentsは複数モデルで画像を扱っても1つのテーブルだけで紐付きを管理できる
schema.rb
create_table "active_storage_attachments", force: :cascade do |t|
:
t.index ["record_type", "record_id", "name", "blob_id"], name:
:
end
上記のカラムの内容 ↓
- record_type
モデル名 - record_id
モデルの対象レコードのid - name
モデルで指定した名称 - blob_id
active_storage_blobs のレコードのid
感想
ActiveStorageは、「画像投稿するときに必要なやつ」くらいの認識しかなかったですが、ER図作成時に誤ってエンティティに写真を追加してしまったときに「そういえばなんでカラム追加しないんだっけ?」と思ったのがきっかけでした。まだまだ理解の足りない初学者ですが少しづつ深堀できるようにしていきたいです。
参考
Discussion