2009-09-09 32 views
47

Dường như phụ thuộc => hủy được bỏ qua khi sử dụng tùy chọn: through.phụ thuộc => hủy trên liên kết "has_many through"

Vì vậy, tôi có điều này ...

class Comment < ActiveRecord::Base 
    has_many :comment_users, :dependent => :destroy 
    has_many :users, :through => :comment_users 
    ... 
end 

... nhưng xóa một Nhận xét không dẫn đến các hồ sơ liên quan đến comment_user bị xóa.

Cách tiếp cận được đề xuất là gì, sau đó, để xóa tầng khi sử dụng: thông qua?

Cảm ơn

Trả lời

96

Dường như: phụ thuộc không bị bỏ qua!

Vấn đề thực sự là tôi đã gọi số Comment.delete(id) chuyển thẳng tới db, trong khi bây giờ tôi sử dụng Comment.destroy(id) để tải đối tượng Comment và gọi destroy() lên đó. Điều này chọn lên các :dependent => :destroy và tất cả là tốt.

+0

Thật vậy! Tôi đã có một vấn đề tương tự, ngoại trừ tôi đã nhận được lỗi chính nước ngoài mặc dù tôi đã sử dụng 'phụ thuộc:: tiêu diệt'. Vấn đề là tôi đã sử dụng 'obj.delete' thay vì' obj.destroy' để người phụ thuộc không bị xóa, do đó lỗi toàn vẹn. –

11

Giải pháp của người đăng ban đầu là hợp lệ, tuy nhiên tôi muốn chỉ ra rằng điều này chỉ hoạt động nếu bạn có cột id cho bảng đó. Tôi thích các bảng nhiều-nhiều của tôi chỉ là hai khóa ngoài, nhưng tôi đã phải loại bỏ "id: false" của tôi khỏi định nghĩa bảng di chuyển để xóa tầng để làm việc. Có chức năng này chắc chắn lớn hơn không có một cột id trên bàn.

+0

Cảm ơn bạn! Tôi chỉ dành nửa ngày để tự mình tìm ra điều đó. – Tintin81

+2

bạn da mvp thực – jed

5

Nếu bạn có một hiệp hội đa hình, bạn nên làm gì @blogofsongs nói nhưng với một thuộc tính foreign_key như vậy:

class User < ActiveRecord::Base 
    has_many :activities , dependent: :destroy, foreign_key: :trackable_id 
end 
Các vấn đề liên quan