2012-11-04 4 views
38

Dies mag eine sehr grundlegende Kontrolle meinerseits sein, aber ich kann mich nicht an eine einfache Methode erinnern, um eine Verbindung zwischen zwei über has_many :through verbundenen Objekten zu entfernen. IE:Aktiver Datensatz has_many: Durch Entfernen eines verknüpften Datensatzes

class Photo 
    has_many :tags, :through => :taggings 
    has_many :taggings, :dependent => :destroy 
end 

class Tags 
    has_many :photos, :through => :taggings 
    has_many :taggings, :dependent => :destroy 
end 

class Taggings 
    belongs_to :photo 
    belongs_to :tag 
end 

Wenn Sie zwei Objekte haben, tag und photo, Sie können sie assoziieren nur dies tun:

photo.tags << tag 

So ist es ein ebenso einfaches Gegenteil dazu? dh:

photo.tags.remove tag 

Antwort

56

hier, was Sie wollen:

photo.tags.delete(tag) 
+23

Beachten Sie, dass dies nicht auslösen 'before_destroy' oder' after_destroy' Rückrufe auf das Modell verbinden - verwenden 'destroy' anstelle von' delete' wenn Du brauchst das. – PinnyM