Как я могу сделать каскадное удаление в отношении one_to_many в Rails ActiveRecord? - PullRequest
5 голосов
/ 10 сентября 2009

У меня есть модель в рельсах с отношением 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 ]

9 голосов
/ 10 сентября 2009

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

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

5 голосов
/ 10 сентября 2009

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

has_many docs

...