Как я могу сделать каскадное удаление в отношении один ко многим в Rails ActiveRecord?


У меня есть модель в rails с отношением one_to_many. Когда я удаляю отца, я хотел бы удалить всех детей. Как мне это сделать? Я хочу удалить все заказы и их элементы, когда я удаляю пользователя

Мои модели:

class User < ActiveRecord::Base
  has_many :orders, :foreign_key => "id_user"
end

class Order < ActiveRecord::Base
  has_many :order_items, :foreign_key => "id_pedido"
  belongs_to :user, :foreign_key => "id_usuer"
end

class OrderItem < ActiveRecord::Base
  belongs_to :order, :foreign_key => "id_pedido"
end
2 5

2 ответа:

Ответ Jdl верен - вам нужно добавить :dependent => :destroy к обоим отношениям - т. е. в вашем User классе добавьте его в has_many :orders, а в вашем Order классе добавьте его в has_many :order_items.

Вы также можете изменить поведение MySQL wrt внешних ключей, возможно, установив их в ON DELETE CASCADE.

То, что вы ищете, - это опция :dependent => :destroy на has_many.

Has_many docs