diff options
author | George Claghorn <george.claghorn@gmail.com> | 2018-07-07 23:25:33 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-07-07 23:25:33 -0400 |
commit | e8682c5bf051517b0b265e446aa1a7eccfd47bf7 (patch) | |
tree | cc04c8a28113bc0fa3748fdc6035d487e3e16af7 /activestorage/lib/active_storage/attached/changes/create_many.rb | |
parent | 0b534cd1c814a4db2d0aa283981f1d55e5e62d25 (diff) | |
download | rails-e8682c5bf051517b0b265e446aa1a7eccfd47bf7.tar.gz rails-e8682c5bf051517b0b265e446aa1a7eccfd47bf7.tar.bz2 rails-e8682c5bf051517b0b265e446aa1a7eccfd47bf7.zip |
Store newly-uploaded files on save rather than assignment
Diffstat (limited to 'activestorage/lib/active_storage/attached/changes/create_many.rb')
-rw-r--r-- | activestorage/lib/active_storage/attached/changes/create_many.rb | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/activestorage/lib/active_storage/attached/changes/create_many.rb b/activestorage/lib/active_storage/attached/changes/create_many.rb new file mode 100644 index 0000000000..3f7ca6a25f --- /dev/null +++ b/activestorage/lib/active_storage/attached/changes/create_many.rb @@ -0,0 +1,32 @@ +# frozen_string_literal: true + +module ActiveStorage + class Attached::Changes::CreateMany #:nodoc: + attr_reader :name, :record, :attachables + + def initialize(name, record, attachables) + @name, @record, @attachables = name, record, Array(attachables) + end + + def attachments + @attachments ||= subchanges.collect(&:attachment) + end + + def upload + subchanges.each(&:upload) + end + + def save + record.public_send("#{name}_attachments=", attachments) + end + + private + def subchanges + @subchanges ||= attachables.collect { |attachable| build_subchange_from(attachable) } + end + + def build_subchange_from(attachable) + ActiveStorage::Attached::Changes::CreateOneOfMany.new(name, record, attachable) + end + end +end |