ruby on rails - rails - carriles 3 habtm borrar solo asociación
rails has_one through (3)
class Company
has_and_belongs_to_many :users
end
class User
has_and_belongs_to_many :companies
end
Cuando borro una compañía, ¿cuál es la mejor manera (recomendada) de eliminar SOLO las asociaciones de los usuarios de esa compañía? (Me refiero no a los usuarios reales, solo a las asociaciones)
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 tu 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 sobre cómo hacer una eliminación en cascada en una asociación de recopilación, muchas personas declaran muerta a la asociación HABTM y recomiendan has_many: through. Estoy en desacuerdo. Usa lo que tenga sentido. Si la asociación no tiene atributos intrínsecos, use HABTM.
Si llama a destroy en lugar de delete, las asociaciones se eliminarán automáticamente.
collection.delete
hará el truco.