2011-02-16 7 views
11

Digamos que tengo una asociación donde el usuario tiene y pertenece a muchos roles. Cuando destruyo al usuario, ¿el registro en la tabla de unión también se elimina automáticamente? ¿O necesito usar: dependent =>: destroy? ¿Qué pasa si destruyo un Papel?¿Los registros en la tabla de unión se destruyen automáticamente en la asociación HABTM?

class User < ActiveRecord::Base 
    has_and_belong_to_many :roles # need to use :dependent => :destroy to remove join record? 
end 

class Role < ActiveRecord::Base 
    has_and_belong_to_many :users # need to use :dependent => :destroy to remove join record? 
end 

Respuesta

10

La entrada de la tabla de unión se quita, pero la función o el usuario no se elimina. No puede agregar una cláusula de destrucción dependiente a has_and_belongs_to_many, pero puede agregarlas a las relaciones en su modelo de unión si lo desea. Por ejemplo, para destruir un papel cuando el asociado unirse entrada de la tabla se elimina tendría que hacer lo siguiente:

class RolesUser < ActiveRecord::Base 
    belongs_to :role, :dependent => :destroy 
    belongs_to :user 
end 
+1

Pensé que uno de los puntos de HABTM era que NO HAY modelo intermedio. Entonces esto no funcionaría a menos que existiera el modelo de RolesUsers. – ipd

+0

HABTM requiere un modelo/tabla intermedio; de lo contrario, la relación no puede existir en una base de datos relacional. Para la tarea que @keruilin está intentando lograr, necesita anexarse ​​a su modelo RolesUser existente o crearlo. –

+6

Para aclarar: HABTM requiere la tabla * intermedia *, pero no el modelo adicional. Utilizará 'has_many/through' si necesita controles o campos adicionales en el modelo intermedio. – ndp

0

confirmada - Cuando se elimina un usuario o rol, todos los registros de la tabla de unión con ese usuario/papel también será eliminado

Cuestiones relacionadas