Должны ли мы написать dependent: destroy для модели таблицы соединений?

#ruby-on-rails #join #models #has-many-through

#ruby-on-rails #Присоединиться #Модели #имеет много сквозных

Вопрос:

У меня есть 3 модели A, B и C. B — это таблица соединений между A и C. Ассоциация выполняется через has_many :through .

Мне было интересно, должны ли модели, не связанные с таблицами соединений (A amp; C в моем случае), иметь dependent: :destroy ассоциацию с таблицей соединений или об этом автоматически заботятся rails?

Это тот же ответ для ассоциации HABTM?

Ответ №1:

Нет, потому что вы можете удалять записи без их создания, что не вызовет зависимого уничтожения, и вы останетесь с потерянными записями.

Например, delete_all

Вместо этого, если вы добавите внешний ключ, база данных обработает удаление, и не имеет значения, создаете ли вы экземпляр объекта или нет.

Например, при миграции вы можете добавить

 def change
  add_foreign_key :as, :bs, on_delete: :cascade
end
  

Или при миграции создания таблицы

 t.belongs_to :a, foreign_key: { on_delete: :cascade }
  

Комментарии:

1. Действительно, я только что протестировал в консоли, нет необходимости указывать dependent: :destroy ассоциацию таблицы has_many объединения, rails, похоже, автоматически уничтожает соответствующие данные в таблице объединения.