1

В примере, где есть объединение владельца, который, как соучастники:зависимый:: destroy - Как это работает?

class Owner < ActiveRecord::Base 
    has_many :buildings, dependent: :destroy 
end 

Другая сторона отношений:

class Building < ActiveRecord::Base 
    belongs_to :owner 
end 

Если бы я удалить владелец, будет ли это уничтожить ассоциированное Здание (а)? Как указать зависимое отношение, чтобы владелец и первичный ключ больше не ассоциировались с каким-либо зданием, если я удалю владельца?

ответ

2

Возможно, вы захотите :nullify. См. Документы Rails для has_many.

:dependent контролирует, что происходит с связанными объектами, когда их владелец уничтожен. Обратите внимание, что они реализованы как обратные вызовы, а Rails выполняет обратные вызовы по порядку. Следовательно, другие подобные обратные вызовы могут влиять на зависимое поведение: зависимое поведение может влиять на другие обратные вызовы.

:destroy вызывает уничтожение всех связанных объектов.

:delete_all вызывает удаление всех связанных объектов непосредственно из базы данных (поэтому обратные вызовы не будут выполнены).

:nullify приводит к тому, что внешние ключи устанавливаются в NULL. Обратные вызовы не выполняются.

:restrict_with_exception вызывает исключение, если есть связанные записи.

:restrict_with_error вызывает ошибку при добавлении владельца, если есть связанные объекты.

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

1
  1. Да, он удалит связанные здания в зависимом от него :destroy.
  2. Если вы хотите сохранить запись здания, я предлагаю вам использовать таблицу соединений, так что, когда владелец будет удален, удаляется только запись в таблице соединений.
Смежные вопросы