#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, похоже, автоматически уничтожает соответствующие данные в таблице объединения.