Could you reimplement this please ... instead of finding and then destroying the voucher in the controller, could you add a #destroy method to the builder object that calls #do_destroy and then yields.  #do_destroy can then actually call destroy on the object itself.  

This is for two reasons - firstly, it keeps as much logic as possible out of the controller and in an object that's easily testable.  Secondly it means that all the exceptions that are thrown are standardised, and hence can be caught by ApplicationController, instead of having a rescue in the controller.  

Does that make sense?