Как удалить ассоциацию после удаления модели

#ruby-on-rails #activerecord

#ruby-on-rails #activerecord

Вопрос:

Вероятно, это довольно просто, но я не совсем уверен, как это реализовать. У меня есть события и пользователи, и к ним присоединяется HABTM. Когда пользователь удаляется, я бы хотел, чтобы все его ассоциации с событиями также были удалены. Кроме того, когда событие удаляется, я бы хотел, чтобы все пользовательские ассоциации с этим событием были удалены. (не сами пользователи, а просто ассоциация) Спасибо! Вот мои ассоциации:

Событие:

   has_and_belongs_to_many :users, :uniq => true
  

Пользователь:

   has_and_belongs_to_many :events, :uniq => true
  

Ответ №1:

Попробуйте :dependents => :destroy. Удачи.

 has_and_belongs_to_many :events, :uniq => true, :dependents => :destroy
  

Может быть другое требование, подробнее см. в документах.

Вы также можете попробовать, my_object.my_dependents.destroy_all. Но, учитывая отношения HABTM, это может привести к удалению всего, если они все связаны вместе, просто кажется немного схематичным, особенно если это происходит в обоих направлениях.

Примечание из документов и ссылок: выбрать способ построения отношений «многие ко многим» не всегда просто. Если вам нужно работать с моделью отношений как с ее собственной сущностью, используйте has_many :through . Используйте has_and_belongs_to_many при работе с устаревшими схемами или когда вы никогда не работаете непосредственно с самой связью.

Ссылка для дополнительной информации:http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

Ответ №2:

Сначала вы должны удалить свои дочерние элементы, а затем перейти к родительским элементам. Вам пришлось бы сделать это в обоих ваших сценариях.

Причина почему; как только вы удалите этот родительский ключ, вы лишите дочерних элементов доступа и больше не будете иметь к ним доступа.

Удачи и надеюсь, что это кому-то поможет.

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

1. Я не понимаю, что вы имеете в виду. Нет ли способа указать, что ассоциация зависит от присутствия обеих моделей?