В данном случае я бы рекомендовал не использовать исключения для управления. Более того, для Вашей задачи больше подойдет параметр
:restrict_with_error
В исходниках рельсы:
when :restrict_with_error
unless empty?
record = klass.human_attribute_name(reflection.name).downcase
owner.errors.add(:base, :"restrict_dependent_destroy.many", record: record)
false
end
else
В этом случае вы как обычно делаете
if @user.destroy
...
else
....
end
Есть еще вариант использовать
before_destroy
директиву, и либо делать там явную проверку, либо бросать исключение в явном виде. Главное в негативном сценарии не забыть вернуть false.