class Post < ActiveRecord::Base
has_many :posts_tags
has_many :tags, through: :posts_tags
end
class PostsTag < ActiveRecord::Base
belongs_to :post
belongs_to :tag
end
class Tag < ActiveRecord::Base
has_many :posts_tags
has_many :posts, through: :posts_tags
end
Khi bài đăng bị hủy, tôi cũng muốn tất cả các liên kết của nó được gắn thẻ cũng bị xóa. Tôi KHÔNG muốn xác thực mô hình PostsTag để chạy. Tôi chỉ muốn xóa.Cách thích hợp để xóa has_many: thông qua hồ sơ tham gia?
Tôi nhận thấy rằng việc thêm người phụ thuộc vào mối quan hệ để đăng thẻ từ mô hình Đăng hoạt động như tôi muốn: has_many :posts_tags, dependent: :delete_all
.
Tuy nhiên, tài liệu về chủ đề dường như gợi ý rằng tôi nên thực hiện việc này thay thế: has_many :tags, through: :posts_tags, dependent: :delete_all
. Khi tôi làm điều này, đối tượng Thẻ bị hủy và đối tượng nối vẫn còn.
http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-has_many
Đối has_many, phá hủy sẽ luôn luôn gọi phá hủy phương pháp của hồ sơ (s) đang được gỡ bỏ để callbacks đang chạy. Tuy nhiên, xóa sẽ thực hiện xóa theo chiến lược được chỉ định bởi tùy chọn: phụ thuộc, hoặc nếu không: tùy chọn phụ thuộc được đưa ra, thì nó sẽ thực hiện theo chiến lược mặc định. Chiến lược mặc định là: nullify (đặt các khóa ngoài thành 0), ngoại trừ has_many: thông qua, trong đó chiến lược mặc định là delete_all (xóa các bản ghi kết nối, mà không cần chạy callback của chúng).
- Làm cách nào để sử dụng chiến lược mặc định? Nếu tôi rời đi: phụ thuộc hoàn toàn, không có hồ sơ nào được xóa bỏ. Và tôi không thể chỉ ra: phụ thuộc vào mối quan hệ has_many. Rails quay trở lại và nói "Tùy chọn: phụ thuộc mong muốn: hủy bỏ,: delete_all,: nullify hoặc: limits ({})".
- Nếu tôi không chỉ định: phụ thuộc vào một trong các mối quan hệ, nó không vô hiệu hóa những post_id trên đối tượng PostsTag vì nó dường như cho thấy
Có lẽ tôi đang đọc bài viết này sai và phương pháp mà tôi thấy công trình là cách chính xác?
Điều gì sẽ xảy ra nếu Thẻ được nhiều bài đăng sử dụng? Nếu một Bài đăng bị xóa, các Bài đăng khác sẽ bị ảnh hưởng. –
đúng và Thẻ phải có 'has_many: bài đăng, thông qua:: posts_tags' không phải bài đăng, tôi sẽ sử dụng' has_many: posts_tags, phụ thuộc:: destroy' để xóa posts_tag và chỉ để thẻ một mình. Bạn có thể xóa các thẻ mồ côi bằng một tác vụ hoặc bàn điều khiển cào. – rmagnum2002
Cố định liên kết, cảm ơn. Tôi chỉ đang cố hiểu tài liệu.Các từ ngữ là khó hiểu – Brian