🤷なんで、ActiveStorageを使わないといけんの?

ここは私も、通常の記事投稿機能みたいな感じで、siteコントローラーで、destroyメソッド導入すればええやんとか思って

コード書いていたんですけど、後々考えたら、それじゃsiteモデルのレコード一列分一気に消してしまうということに気がつきました💦

今回実行したいことは、要するに、siteモデルにActiveStorage

を使って付属させた、画像(image)カラムのファイルのみを削除させたいということです!

<POINT>

ActiveStorageを使うと、画像をアタッチしているモデルのデータは残したまま、特定の画像だけを削除することができる。

これで、必要なデータはそのままにして、不要なファイルだけを管理でき流効率的なコードが書けます。

<削除機能実装方法>

今回は、siteモデルにActiveStorageを使い、付属している、画像データfaviconとog:imageの削除機能を実装します。

siteモデルファイルにて、ActiveStorage用のカラムを追加する。

class Site < ApplicationRecord
  has_one_attached :og_image
  has_one_attached :favicon
↑この部分が、ActiveStorage用のカラム記載方法。
 
  validates :name, presence: true, length: { maximum: 100 }
  validates :subtitle, length: { maximum: 100 }
  validates :description, length: { maximum: 400 }
  validates :og_image, attachment: { purge: true, content_type: %r{\\Aimage/(png|jpeg)\\Z}, maximum: 524_288_000 }
  validates :favicon, attachment: { purge: true, content_type: %r{\\Aimage/png\\Z}, maximum: 524_288_000 }
  ↑バリデーションの設定もモデル内にて実装可能
end