提交 e3b2a573 编写于 作者: G George Claghorn

Fix attaching many uploaded files one at a time

Closes #36806.
上级 5a4305f0
......@@ -8,6 +8,10 @@ def initialize(name, record)
@name, @record = name, record
end
def attachables
[]
end
def attachments
ActiveStorage::Attachment.none
end
......
......@@ -31,7 +31,7 @@ def attach(*attachables)
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
......
......@@ -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")
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册