рельсы 3 habtm удалить только ассоциацию - PullRequest
19 голосов
/ 14 февраля 2011
class Company
  has_and_belongs_to_many :users
end

class User
  has_and_belongs_to_many :companies
end

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

Ответы [ 3 ]

18 голосов
/ 15 июня 2011

Я предпочитаю следующее, поскольку в модели сохраняется логика модели.Я не понимаю, почему 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.

17 голосов
/ 14 февраля 2011
12 голосов
/ 14 февраля 2011

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

...