1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Fix attaching many uploaded files one at a time

Closes #36806.
This commit is contained in:
George Claghorn 2019-08-15 16:36:34 -04:00
parent f61542c3f6
commit 836eb915b1
3 changed files with 26 additions and 1 deletions

View file

@ -8,6 +8,10 @@ module ActiveStorage
@name, @record = name, record
end
def attachables
[]
end
def attachments
ActiveStorage::Attachment.none
end

View file

@ -31,7 +31,7 @@ module ActiveStorage
if record.persisted? && !record.changed?
record.update(name => blobs + attachables.flatten)
else
record.public_send("#{name}=", blobs + attachables.flatten)
record.public_send("#{name}=", (change&.attachables || blobs) + attachables.flatten)
end
end

View file

@ -109,6 +109,27 @@ class ActiveStorage::ManyAttachedTest < ActiveSupport::TestCase
assert_equal "video.mp4", @user.highlights.second.filename.to_s
end
test "attaching new blobs from uploaded files to an existing, changed record one at a time" do
@user.name = "Tina"
assert @user.changed?
@user.highlights.attach fixture_file_upload("racecar.jpg")
@user.highlights.attach fixture_file_upload("video.mp4")
assert_equal "racecar.jpg", @user.highlights.first.filename.to_s
assert_equal "video.mp4", @user.highlights.second.filename.to_s
assert_not @user.highlights.first.persisted?
assert_not @user.highlights.second.persisted?
assert @user.will_save_change_to_name?
assert_not ActiveStorage::Blob.service.exist?(@user.highlights.first.key)
assert_not ActiveStorage::Blob.service.exist?(@user.highlights.second.key)
@user.save!
assert_equal "racecar.jpg", @user.highlights.reload.first.filename.to_s
assert_equal "video.mp4", @user.highlights.second.filename.to_s
assert ActiveStorage::Blob.service.exist?(@user.highlights.first.key)
assert ActiveStorage::Blob.service.exist?(@user.highlights.second.key)
end
test "attaching existing blobs to an existing record one at a time" do
@user.highlights.attach create_blob(filename: "funky.jpg")
@user.highlights.attach create_blob(filename: "town.jpg")