Подтвердить что ты не робот

Rails 3 habtm удалить только объединение

class Company
  has_and_belongs_to_many :users
end

class User
  has_and_belongs_to_many :companies
end

когда я удаляю компанию, какой лучший (рекомендуемый) способ удалить ТОЛЬКО ассоциации пользователей из этой компании? (я имею в виду не фактических пользователей, а только ассоциации)

4b9b3361

Ответ 2

Я предпочитаю следующее, поскольку он сохраняет модельную логику в модели. Я не понимаю, почему 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: вместо этого. Я не согласен. Используйте все, что имеет смысл. Если ассоциация не имеет внутренних атрибутов, используйте HABTM.

Ответ 3

Если вы вызываете destroy вместо delete, ассоциации будут удалены автоматически.