ActiveStorageで保存した画像はどこにあるの?
単刀直入に言うとルートディレクトリ配下のstorageフォルダに入ってる。
Railsのディレクトリ構造について
そしてファイル保存形式がpngやjpegではない!
データベースに適したBlob型に変換されてstorageフォルダに保存される。
Blobって何?
データベース管理システム(DBMS)においてバイナリデータを格納する場合のデータ型である。画像や音声、その他のマルチメディアオブジェクトがBLOBとして格納される。
参考文献:Blobとは?
テーブル的にはどうなっているの?
schema.rbに書かれているactive_storage_blobsテーブルとactive_storage_attachmentsテーブルによって実際の画像ファイルとモデルが関連付けられてるみたい。
ChatGPT先生曰く、
active_storage_blobs:
このテーブルは、アップロードされたファイルのメタデータを格納します。
key: ファイルの一意の識別子で、ファイルの保存場所を特定するために使用されます。
filename: アップロードされたファイルの元のファイル名が格納されます。
content_type: アップロードされたファイルのMIMEタイプが格納されます。
metadata: ファイルのメタデータ(例:幅、高さなど)がJSON形式で格納される場合があります。
active_storage_attachments:
このテーブルは、ファイルとモデル(例:Userモデル)との関連付け情報を管理します。
name: ファイルと関連付けられた名前(例:avatar、imageなど)が格納されます。
record_type: 関連付けられたモデルのクラス名が格納されます。
record_id: 関連付けられたモデルのIDが格納されます。
blob_id: active_storage_blobsテーブルのレコードを特定するための外部キーです。
まとめると
保存までの流れはこうである。
- railsアプリケーションで画像を保存する
- rootディレクトリ配下のstorageにてblob形式にして保存する。
であるから、サーバーを立ち上げなおしても画像が残っているのである!