是否需要从协会的两边删除?

时间:2012-02-19 04:03:26

标签: ruby-on-rails ruby activerecord associations

我有两个模型,通过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 个答案:

答案 0 :(得分:2)

如果您使用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 # => []