Я предпочитаю следующее, поскольку в модели сохраняется логика модели.Я не понимаю, почему ActiveRecord не просто делает это.В любом случае, в обеих объединенных моделях я добавляю следующий обратный вызов.
before_destroy {|object| object.collection.clear}
В вашем примере:
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
Во многих дискуссиях вокруг каскадного удаления ассоциации ассоциациимногие люди объявляют ассоциацию HABTM мертвой и рекомендуют вместо этого has_many: through.Я не согласен.Используйте все, что имеет смысл.Если ассоциация не имеет внутренних атрибутов, используйте HABTM.