2012-02-19 12 views
1

私はhas_and_belongs_to_manyの関連付けによって関連付けられた2つのモデルを持っています。私は2つのオブジェクト間の関連付けを破棄したいが、オブジェクト自体は削除しない。次のより簡単な方法がありますか?関連の両側から削除する必要がありますか?

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 

答えて

2

has_and_belongs_to_manyを使用している場合、関連付けレコードは結合テーブルにあります。リスト_連絡先。したがって、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 # => [] 
+0

おかげで多くの。 :)コントローラの他の場所でものをリロードする必要があることを私に思い出させました。 D'oh。 – Drew