ここは私も、通常の記事投稿機能みたいな感じで、siteコントローラーで、destroyメソッド導入すればええやんとか思って
コード書いていたんですけど、後々考えたら、それじゃsiteモデルのレコード一列分一気に消してしまうということに気がつきました💦
今回実行したいことは、要するに、siteモデルにActiveStorage
を使って付属させた、画像(image)カラムのファイルのみを削除させたいということです!
<POINT>
ActiveStorageを使うと、画像をアタッチしているモデルのデータは残したまま、特定の画像だけを削除することができる。
これで、必要なデータはそのままにして、不要なファイルだけを管理でき流効率的なコードが書けます。
今回は、siteモデルにActiveStorageを使い、付属している、画像データfaviconとog:imageの削除機能を実装します。
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