¿Cómo puedo hacer una eliminación en cascada en una relación one_to_many en Rails ActiveRecord?
-
05-07-2019 - |
Pregunta
Tengo un modelo en rieles con relación one_to_many. Cuando borre al padre, me gustaría borrar todos los niños. ¿Cómo debería hacerlo? Quiero eliminar todos los pedidos y sus artículos cuando elimino un usuario
Mis modelos son:
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
Solución
La respuesta de
jdl es correcta: debe agregar : dependen = > : destruye
en ambas relaciones, es decir, en su clase Usuario
, agréguelo a has_many: orders
y en su clase Order
, agréguelo a has_many: order_items
.
También es posible que desee cambiar el comportamiento de MySQL con claves externas wrt, quizás configurándolas en ON DELETE CASCADE
.
Otros consejos
Lo que está buscando es el : dependen = > : opción destruir
en has_many
.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow