active_storage_blobs テーブルの役割active_storage_attachments テーブルの役割has_many_attached)id ではなく key を使うのかActive Storageとは、一言でいえば 「Active Record のストレージ版」 のような機能です。
データベースのレコードをRubyオブジェクトとして扱えるようにするのがActive Recordなら、Active Storageは ストレージに保存したファイルを、モデルに簡単に関連付け、Rubyオブジェクトのように扱えるようにする ためのフレームワークです。
これを使うことで、ファイルの保存先(Amazon S3やローカルディスクなど)がどこであってもコード上では同じように操作でき、ユーザーのプロフィール画像や投稿の添付ファイルなどを統一的に管理できます。
主な特徴
以前は CarrierWave や Shrine といったGemが広く使われていました。これらはActive Storageよりも詳細なカスタマイズが可能ですが、現在では特別な理由がない限り、まずは標準機能であるActive Storageの利用を検討するのが一般的です。
ここでは、User モデルにプロフィール画像(avatar)を追加するケースを例に、実装の大きな流れを4ステップで解説します。