Вы должны использовать update
вместо update!
, потому что в ту минуту, когда исключение перехватывается, выполнение вашего кода будет остановлено и перенаправлено в блок восстановления. update
, с другой стороны, возвращает только ложь при ошибке.
Попробуйте что-то вроде этого:
def update
dot_applications = DotApplication.where(id: params[:ids])
bad_dot_app_update = dot_applications.reject do |dot_app| # Reject element where updates are successfull
dot_application.update(lead_source_id: resource_params[:lead_source_id])
end
if bad_dot_app_update.any?
# Here you can access the array and do whatever you want.
errors = bad_dot_app_update.collect {|bad_dot_app| bad_dot_app.errors }
# Collecting errors, only needs formating for printing
render dialog: {
close_dialog: true,
error_message: "Can't update lead sources because #{error.message}"
}
else
render dialog: {
close_dialog: true,
success_message: "The lead source was changed for selected applicants."
}
end
end