いう仕組みが導入されました。お手軽で便利な仕組みなのですが、とある問題に遭遇した際「ここ、もう少しシュッと書けないものだろうか...?」と試行錯誤しました。本記事ではその問題となったケースと、実際に行った解決策について紹介していきたいと思います。ActiveStorage、アップロードした実体ファイルは概ね下図のような関係になります。メソッド:User.find(1).avatar.purgeを実行すると、各テーブルは下記のように変化します。クラスとアップロードしたファイル、それらを関連付ける2つのテーブルが存在することを覚えておいてください。上記の特性を持つという前提で、実際に私が悩んだロジックについて紹介していきます。いうケースにおいて、つい書いてしまいがちなコードについて考えます。????一見問題なさそうですが、致命的なバグが存在しています。実体ファイルは復活しません。なってしまうと、いわゆるデータ不整合状態となります。禁止したいそれでは次のケースはどうでしょうか。順番を変えるだけで解決できません。紹介した「問題になりやすいケース」の解決案として、本記事では下記に紹介する2つの技を合体させて対応していきます。いうものが存在します。トランザクションに含めて記述できるようになり、より直感的になりました。それが参照している実体ファイルは残ったままになります。このままではディスクリソースの無駄遣いなので、定期的に掃除する必要があります。呼び出すことで、定期的に掃除することが可能となります。ファイル削除を、より便利にするための一例を紹介しました。特有のバリデーション(ファイルサイズや拡張子の限定など)も、まだ自前で書く必要があります。今回紹介できなかった便利機能などもあるため、上記の改善も合わせてより使い勝手も上がっていくことを期待しています。移行に潜む闇こんにちは。移行しましたこんにちは。parameterSmartHRに入社したついでに髪の毛の色をコーポレートカラーにしたので入社ブログを書きました!私がSmartHRに入社して一ヶ月が過ぎました月別アーカイブスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。