From 9431529011b0057bb8833dc16726714166547a28 Mon Sep 17 00:00:00 2001 From: kami-zh Date: Tue, 9 Jan 2018 12:28:38 +0900 Subject: [PATCH] Change Active Storage destroy callbacks There is concern that only blob are deleted depending on the `before_destroy` definition order which throws abort. --- activestorage/CHANGELOG.md | 6 ++++++ activestorage/lib/active_storage/attached/macros.rb | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/activestorage/CHANGELOG.md b/activestorage/CHANGELOG.md index 9ce177b462..5e01297fc1 100644 --- a/activestorage/CHANGELOG.md +++ b/activestorage/CHANGELOG.md @@ -1,3 +1,9 @@ +* Use `after_destroy_commit` instead of `before_destroy` for purging + attachments when a record is destroyed. + + *Hiroki Zenigami* + + * Force `:attachment` disposition for specific, configurable content types. This mitigates possible security issues such as XSS or phishing when serving them inline. A list of such content types is included by default, diff --git a/activestorage/lib/active_storage/attached/macros.rb b/activestorage/lib/active_storage/attached/macros.rb index 442dcabd0c..c51efa9d6b 100644 --- a/activestorage/lib/active_storage/attached/macros.rb +++ b/activestorage/lib/active_storage/attached/macros.rb @@ -44,7 +44,7 @@ def #{name}=(attachable) scope :"with_attached_#{name}", -> { includes("#{name}_attachment": :blob) } if dependent == :purge_later - before_destroy { public_send(name).purge_later } + after_destroy_commit { public_send(name).purge_later } end end @@ -89,7 +89,7 @@ def #{name}=(attachables) scope :"with_attached_#{name}", -> { includes("#{name}_attachments": :blob) } if dependent == :purge_later - before_destroy { public_send(name).purge_later } + after_destroy_commit { public_send(name).purge_later } end end end -- GitLab