diff options
Diffstat (limited to 'app/services/issuable/bulk_update_service.rb')
-rw-r--r-- | app/services/issuable/bulk_update_service.rb | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/app/services/issuable/bulk_update_service.rb b/app/services/issuable/bulk_update_service.rb index cd32cd78728..238f5ebddae 100644 --- a/app/services/issuable/bulk_update_service.rb +++ b/app/services/issuable/bulk_update_service.rb @@ -57,7 +57,11 @@ module Issuable items.each do |issuable| next unless can?(current_user, :"update_#{type}", issuable) - update_class.new(**update_class.constructor_container_arg(issuable.issuing_parent), current_user: current_user, params: params).execute(issuable) + update_class.new( + **update_class.constructor_container_arg(issuable.issuing_parent), + current_user: current_user, + params: dup_params + ).execute(issuable) end items @@ -78,6 +82,19 @@ module Issuable .includes_for_bulk_update end + # Duplicates params and its top-level values + # We cannot use deep_dup because ActiveRecord objects will result + # to new records with no id assigned + def dup_params + dup = HashWithIndifferentAccess.new + + params.each do |key, value| + dup[key] = value.is_a?(ActiveRecord::Base) ? value : value.dup + end + + dup + end + def response_success(message: nil, payload: nil) ServiceResponse.success(message: message, payload: payload) end |