Introduce bulk :create, :update and :destroy

Introduce bulk :create, :update and :destroy actions to avoid doing several request in the admin schedule.
This commit is contained in:
Ana 2016-08-18 00:27:52 +02:00 committed by Ana María Martínez Gómez
parent 10561129f9
commit bcff982d3d
5 changed files with 186 additions and 136 deletions

View file

@ -2,40 +2,40 @@ module Admin
class EventSchedulesController < Admin::BaseController
load_and_authorize_resource :event_schedule
def create
if @event_schedule.save
render json: { event_schedule_id: @event_schedule.id }
else
render json: { errors: parse_errors(@event_schedule) }, status: 422
end
end
def update
if @event_schedule.update(event_schedule_params)
render json: { event_schedule_id: @event_schedule.id }
else
render json: { errors: parse_errors(@event_schedule) }, status: 422
end
end
def destroy
if @event_schedule.destroy
def bulk_create
result = EventSchedule.create(params[:event_schedules].values).reject { |p| p.errors.empty? }
if result.empty?
render json: {}
else
render json: { errors: parse_errors(@event_schedule) }, status: 422
event_names = result.collect { |event_schedule| event_schedule.event.try(:title) }
render json: { errors: event_names.to_s }, status: 422
end
end
private
def event_schedule_params
params.require(:event_schedule).permit(:schedule_id, :event_id, :room_id, :start_time)
def bulk_update
keys = []
values = []
params[:event_schedules].values.each do |e|
keys << e.keys[0]
values << e.values[0]
end
result = EventSchedule.update(keys, values).reject { |p| p.errors.empty? }
if result.empty?
render json: {}
else
event_names = result.collect { |event_schedule| event_schedule.event.try(:title) }
render json: { errors: event_names.to_s }, status: 422
end
end
def parse_errors(event_schedule)
title = event_schedule.event.try(:title).present? ? event_schedule.event.title : 'The event'
errors = event_schedule.errors.full_messages.present? ? " (#{event_schedule.errors.full_messages.join('. ')})" : ''
"#{title} couldn't be scheduled#{errors}. "
def bulk_destroy
result = EventSchedule.destroy(params[:event_schedules].values).reject { |p| p.errors.empty? }
if result.empty?
render json: {}
else
event_names = result.collect { |event_schedule| event_schedule.event.try(:title) }
render json: { errors: event_names.to_s }, status: 422
end
end
end
end