Требуется ли удалить с обеих сторон ассоциации? - PullRequest
1 голос
/ 19 февраля 2012

У меня есть две модели, связанные через ассоциацию has_and_belongs_to_many. Я хочу уничтожить связь между двумя объектами, но не удалять сами объекты. Есть ли более простой способ сделать это, чем следующий?

list = List.find(params[:list_id])
contact = Contact.find(params[:contact_id])

list.contacts.delete contact
contact.contact_lists.delete list

list.save
contact.save

1 Ответ

2 голосов
/ 19 февраля 2012

Если вы используете has_and_belongs_to_many, запись ассоциации находится в таблице соединений, например lists_contacts.Так что только одна сторона операции, такая как list.contacts.delete contact, удалит эту строку, и этого достаточно.

Например:

list = List.create
contact = Contact.create
list.contacts << contact
list.save
p contact.lists # => [#<List id: 5, name: nil>]
list.contacts.delete contact
list.save
p contact.reload.lists # => []
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...