One way other projects have done similar things is to extract all of this into a service object and just call it from the controller, e.g:
```ruby
outcome = BatchProcessService.process(@batch)
if outcome.queued?
  # it's been queued!
else:
  # congrats it's done!
end
```

keeps the controller pretty small and makes the batch processing machine more testable.