From 9a29e634fc07eab9c09b27a2e79456272bef316e Mon Sep 17 00:00:00 2001 From: Pau Perez Date: Thu, 28 May 2020 17:49:36 +0200 Subject: [PATCH] Deal with Schedule creation in its own controller This way it can assign the order cycles to the schedule when this is persisted. An OrderCycleSchedule (the join table) can't be created until both schedule and order_cycle got an id. Also, we do not call `#adapt_params` when creating the Schedule as that assigns `order_cycle_ids` to `@object.attributes` thus, attempting to create the OrderCycleSchedule without a schedule_id. --- app/controllers/admin/schedules_controller.rb | 27 ++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/app/controllers/admin/schedules_controller.rb b/app/controllers/admin/schedules_controller.rb index 44ccb48d64..59528cf158 100644 --- a/app/controllers/admin/schedules_controller.rb +++ b/app/controllers/admin/schedules_controller.rb @@ -3,7 +3,7 @@ require 'order_management/subscriptions/proxy_order_syncer' module Admin class SchedulesController < ResourceController - before_filter :adapt_params, only: [:create, :update] + before_filter :adapt_params, only: [:update] before_filter :check_editable_order_cycle_ids, only: [:create, :update] before_filter :check_dependent_subscriptions, only: [:destroy] create.after :sync_subscriptions @@ -28,6 +28,25 @@ module Admin end end + def create + invoke_callbacks(:create, :before) + @object.attributes = permitted_resource_params + @object.save! + + @object.order_cycle_ids = params[:order_cycle_ids] + if @object.save + invoke_callbacks(:create, :after) + flash[:success] = flash_message_for(@object, :successfully_created) + respond_with(@object) do |format| + format.html { redirect_to location_after_save } + format.js { render layout: false } + end + else + invoke_callbacks(:create, :fails) + respond_with(@object) + end + end + private def collection @@ -95,11 +114,7 @@ module Admin end def permitted_resource_params - params.require(:schedule).permit( - :id, - :name, - order_cycle_ids: [] - ) + params.require(:schedule).permit(:id, :name) end end end