2011-02-14 20 views
17
class Company 
    has_and_belongs_to_many :users 
end 

class User 
    has_and_belongs_to_many :companies 
end 

cuando elimino una empresa, ¿cuál es la mejor (recomendada) forma de eliminar SOLAMENTE las asociaciones de los usuarios de esa empresa? (No me refiero a los usuarios reales, sólo las asociaciones)rieles 3 habtm eliminar solo asociación

Respuesta

11

Si llama a destroy en lugar de delete, las asociaciones se eliminarán automáticamente.

18

Prefiero lo siguiente ya que mantiene la lógica del modelo en el modelo. No entiendo por qué ActiveRecord no solo lo hace. De todos modos, en ambos modelos unidos, agrego la siguiente devolución de llamada.

before_destroy {|object| object.collection.clear} 

Así que en su ejemplo:

class Company 
    has_and_belongs_to_many :users 
    before_destroy {|company| company.users.clear} 
end 

class User 
    has_and_belongs_to_many :companies 
    before_destroy {|user| user.companies.clear} 
end 

En muchas discusiones en torno a hacer una eliminación en cascada en una asociación colección, muchas personas declaran la asociación HABTM muertos y recomiendan has_many: a través de su lugar. Estoy en desacuerdo. Usa lo que tenga sentido. Si la asociación no tiene atributos intrínsecos, entonces use HABTM.

Cuestiones relacionadas