diff options
author | George Claghorn <george@basecamp.com> | 2018-03-05 15:57:52 -0500 |
---|---|---|
committer | George Claghorn <george@basecamp.com> | 2018-03-05 15:57:52 -0500 |
commit | 8228d12a43927a22d0ac9bd351d18f473d6a49ae (patch) | |
tree | 84fcfdc690c921c62e7c175e1d413bb586e1dbb4 | |
parent | 8f0b0eecb007d08dfcc1d3c334c828c3ef877bfe (diff) | |
download | rails-8228d12a43927a22d0ac9bd351d18f473d6a49ae.tar.gz rails-8228d12a43927a22d0ac9bd351d18f473d6a49ae.tar.bz2 rails-8228d12a43927a22d0ac9bd351d18f473d6a49ae.zip |
Delete dependent attachments with record
[Matt Jones & George Claghorn]
-rw-r--r-- | activestorage/lib/active_storage/attached/macros.rb | 4 | ||||
-rw-r--r-- | activestorage/test/models/attachments_test.rb | 14 | ||||
-rw-r--r-- | activestorage/test/test_helper.rb | 1 |
3 files changed, 17 insertions, 2 deletions
diff --git a/activestorage/lib/active_storage/attached/macros.rb b/activestorage/lib/active_storage/attached/macros.rb index c51efa9d6b..a87f02efe1 100644 --- a/activestorage/lib/active_storage/attached/macros.rb +++ b/activestorage/lib/active_storage/attached/macros.rb @@ -38,7 +38,7 @@ module ActiveStorage end CODE - has_one :"#{name}_attachment", -> { where(name: name) }, class_name: "ActiveStorage::Attachment", as: :record, inverse_of: :record + has_one :"#{name}_attachment", -> { where(name: name) }, class_name: "ActiveStorage::Attachment", as: :record, inverse_of: :record, dependent: :delete has_one :"#{name}_blob", through: :"#{name}_attachment", class_name: "ActiveStorage::Blob", source: :blob scope :"with_attached_#{name}", -> { includes("#{name}_attachment": :blob) } @@ -83,7 +83,7 @@ module ActiveStorage end CODE - has_many :"#{name}_attachments", -> { where(name: name) }, as: :record, class_name: "ActiveStorage::Attachment", inverse_of: :record + has_many :"#{name}_attachments", -> { where(name: name) }, as: :record, class_name: "ActiveStorage::Attachment", inverse_of: :record, dependent: :delete_all has_many :"#{name}_blobs", through: :"#{name}_attachments", class_name: "ActiveStorage::Blob", source: :blob scope :"with_attached_#{name}", -> { includes("#{name}_attachments": :blob) } diff --git a/activestorage/test/models/attachments_test.rb b/activestorage/test/models/attachments_test.rb index cb52a57b33..a5fcad1bab 100644 --- a/activestorage/test/models/attachments_test.rb +++ b/activestorage/test/models/attachments_test.rb @@ -80,6 +80,20 @@ class ActiveStorage::AttachmentsTest < ActiveSupport::TestCase end end + test "replace independent attached blob" do + @user.cover_photo.attach create_blob(filename: "funky.jpg") + + perform_enqueued_jobs do + assert_difference -> { ActiveStorage::Blob.count }, +1 do + assert_no_difference -> { ActiveStorage::Attachment.count } do + @user.cover_photo.attach create_blob(filename: "town.jpg") + end + end + end + + assert_equal "town.jpg", @user.cover_photo.filename.to_s + end + test "attach blob to new record" do user = User.new(name: "Jason") diff --git a/activestorage/test/test_helper.rb b/activestorage/test/test_helper.rb index aaf1d452ea..9b5cd41335 100644 --- a/activestorage/test/test_helper.rb +++ b/activestorage/test/test_helper.rb @@ -65,5 +65,6 @@ ActiveRecord::Base.send :include, GlobalID::Identification class User < ActiveRecord::Base has_one_attached :avatar + has_one_attached :cover_photo, dependent: false has_many_attached :highlights end |