ruby-on-rails - references - rails has_one through
dependiente=> destruir en una asociaciĆ³n "has_many through" (3)
Aparentemente: ¡no se ignora a los dependientes!
El problema real era que estaba llamando a Comment.delete(id)
que va directamente a la base de datos, mientras que ahora uso Comment.destroy(id)
que carga el objeto Comment y llama a destroy () en él. Esto recoge el :dependent => :destroy
y todo está bien.
Aparentemente dependent => destroy se ignora cuando también se usa la opción: through.
Entonces tengo esto ...
class Comment < ActiveRecord::Base
has_many :comment_users, :dependent => :destroy
has_many :users, :through => :comment_users
...
end
... pero al eliminar un comentario no se eliminan los registros de comment_user asociados.
¿Cuál es el enfoque recomendado, entonces, para eliminar en cascada al usar: a través de?
Gracias
La solución del póster original es válida, sin embargo, quería señalar que esto solo funciona si tiene una columna de identificación para esa tabla. Prefiero que mis tablas de muchos a muchos sean solo las dos claves foráneas, pero tuve que eliminar mi "id: falso" de la definición de la tabla de migración para conectar en cascada delete to work. Tener esta funcionalidad definitivamente compensa tener una columna de identificación en la mesa.
Si tiene una asociación polimórfica, debe hacer lo que dijo @blogofsongs pero con un atributo foreign_key como ese:
class User < ActiveRecord::Base
has_many :activities , dependent: :destroy, foreign_key: :trackable_id
end