2011-01-29 29 views
5

Đường ray 2.3.8. Tôi có 3 mô hình, Người dùng, Nguồn và Đăng ký.Làm cách nào để kích hoạt hủy cuộc gọi lại cho một đối tượng là một phần của mô hình tham gia tự động xóa đối tượng đó?

User attr_accessible :source_ids 
      has_many :subscriptions 
      has_many :sources, :through => :subscriptions 

Source  has_many :subscriptions 

Subscription belongs_to :user 
      belongs_to :source 

Tôi có giao diện cho phép Người dùng chỉnh sửa Đăng ký của họ thành Nguồn. Nó thu thập source_ids và tạo hoặc xóa Đăng ký dựa trên bộ sưu tập. Vấn đề tôi gặp phải là, báo giá:

"Tự động xóa mô hình kết nối là trực tiếp, không phá hủy các cuộc gọi lại được kích hoạt".

Đăng ký sẽ bị xóa, không bị hủy. Tôi có một callback trong mô hình đăng ký mà không được kích hoạt:

before_destroy do |subscription| 
    [Some irrelevant object not to be mentioned].destroy 
end 

Câu hỏi của tôi là, làm thế nào tôi có thể kích hoạt callback này khi đăng ký sẽ tự động bị xóa do mô hình tham gia?

Trả lời

5

Trả lời cho trả lời của bạn trong HMT collection_singular_ids= deletion of join models is direct, no destroy callbacks are triggered

Thay đổi dòng này:

has_many :users, :through => :memberships 

Để này :

has_many :users, :through => :memberships, :after_remove => :your_custom_method 

Và xác định protected_custom_method trong Mô hình người dùng. Bằng cách này, khi người dùng xóa đăng ký vào một số nguồn, phương thức này sẽ được gọi.

Chúc may mắn!

2
@user.subscriptions.delete 
has_many :subscriptions, :dependent => :destroy # <- setting this on the association will destroy the related subscriptions 
has_many :subscriptions, :dependent => :delete_all # <- setting this on the association will delete the related subscriptions 

Từ rdoc:

collection.delete (object, ...)
Loại bỏ một hoặc nhiều đối tượng từ bộ sưu tập bằng cách thiết lập các phím nước ngoài của họ để NULL. Đối tượng sẽ được cộng bị phá hủy nếu họ đang liên kết với :dependent => :destroy, và bị xóa nếu họ đang liên kết với :dependent => :delete_all

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