Это действительно зависит от того, что Вы создаете.
не совсем неблагоразумно для веб-сервера привести одну пару запроса/ответа к сбою, но затем продолжить идти для дальнейших запросов. Необходимо было бы быть уверены, что одиночный отказ не имел неблагоприятных эффектов на глобальное состояние, однако - который будет хитрым битом. Учитывая, что отказ вызывает исключение в большинстве управляемых сред (например.NET и Java), я подозреваю, что, если бы исключение обработано в "пользовательском коде", это было бы восстанавливаемо для будущих запросов - например, если один запрос пытался выделить 10 ГБ памяти и отказавший, который не должен вредить остальной части системы. Если система исчерпывает память при попытке вручить от запроса пользовательскому коду, однако - такая вещь могла быть более противной.
Ответ jdl правильный - вам необходимо добавьте : independent =>: destroy
к обоим отношениям, то есть в вашем классе User
добавьте его в has_many: orders
и в свой Order
, добавьте его в has_many: order_items
.
Вы также можете изменить поведение MySQL в отношении внешних ключей, возможно, установив для них значение ON DELETE CASCADE
.
Вам нужна опция : independent =>: destroy
в has_many
.