diff options
Diffstat (limited to 'activestorage/lib/active_storage')
-rw-r--r-- | activestorage/lib/active_storage/attached/one.rb | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/activestorage/lib/active_storage/attached/one.rb b/activestorage/lib/active_storage/attached/one.rb index 87c650b3d0..ac90f32d95 100644 --- a/activestorage/lib/active_storage/attached/one.rb +++ b/activestorage/lib/active_storage/attached/one.rb @@ -21,7 +21,9 @@ module ActiveStorage # person.avatar.attach(io: File.open("~/face.jpg"), filename: "face.jpg", content_type: "image/jpg") # person.avatar.attach(avatar_blob) # ActiveStorage::Blob object def attach(attachable) - purge_dependent_attachment do + if attached? && dependent == :purge_later + replace attachable + else write_attachment create_attachment_from(attachable) end end @@ -54,17 +56,13 @@ module ActiveStorage end private - def purge_dependent_attachment - if attached? && dependent == :purge_later - blob.tap do - transaction do - destroy - yield - end - end.purge_later - else - yield - end + def replace(attachable) + blob.tap do + transaction do + destroy + write_attachment create_attachment_from(attachable) + end + end.purge_later end def create_attachment_from(attachable) |