#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. Я не понимаю, что вы имеете в виду. Нет ли способа указать, что ассоциация зависит от присутствия обеих моделей?