2012-11-04 26 views
38

Đây có thể là một sự giám sát rất cơ bản về phía tôi, nhưng tôi dường như không thể nhớ lại một phương pháp đơn giản để xóa liên kết giữa hai đối tượng đã tham gia qua has_many :through. IE:Active Record has_many: thông qua xóa một bản ghi liên quan

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 

Nếu bạn có hai đối tượng, tagphoto, bạn có thể kết hợp chúng chỉ bằng cách làm này:

photo.tags << tag 

Vì vậy, là có một đối diện đều đơn giản để điều này? ví dụ:

photo.tags.remove tag 

Trả lời

56

đây là những gì bạn muốn:

photo.tags.delete(tag) 
+23

Lưu ý rằng điều này sẽ không kích hoạt 'before_destroy' hoặc 'after_destroy' callbacks trên mô hình tham gia - sử dụng' destroy' tại chỗ của 'DELETE' nếu bạn cần điều đó. – PinnyM

Các vấn đề liên quan