Записи в таблице соединений автоматически уничтожаются в ассоциации HABTM?

Скажем, у меня есть ассоциация, в которой пользователь имеет и принадлежит многим ролям. Когда я уничтожаю пользователя, автоматически ли удаляется запись в таблице соединений? Или мне нужно использовать: depend = > : destroy? А если я уничтожу роль?

class User < ActiveRecord::Base
   has_and_belong_to_many :roles # need to use :dependent => :destroy to remove join record?
end

class Role < ActiveRecord::Base
   has_and_belong_to_many :users # need to use :dependent => :destroy to remove join record?
end

Ответ 1

Запись таблицы соединений удаляется, но Роль или Пользователь не удаляются. Вы не можете добавить зависимое условие destroy к has_and_belongs_to_many, но вы можете добавить их к отношениям в вашей модели соединения, если хотите. Например, чтобы уничтожить роль при удалении связанной записи таблицы соединений, вы сделаете следующее:

class RolesUser < ActiveRecord::Base
  belongs_to :role, :dependent => :destroy
  belongs_to :user
end

Ответ 2

Подтверждено - при удалении пользователя или роли все записи в таблице соединений с этим пользователем/ролью также будут удалены.