2012-06-26 92 views
0

我正在通過關聯使用has_many並且無法使before_destroy回調觸發。我正在使用關聯類來關聯模型。before_destroy關係模型

class Relating < ActiveRecord::Base 
    belongs_to :relater, :polymorphic => true 
    belongs_to :related, :polymorphic => true 

    before_destroy :unset_reminders 
end 

例如,用戶可以添加到TvShows喜好列表,User.rb:

has_many :tv_shows, :through => :relateds, :source => :related, :source_type => 'TvShow' 

我遇到的問題,與此刪除有關記錄的事情。

我能與用戶和電視節目:

user = User.find(1) 
show = TvShow.find(1) 
user.tv_shows << show 

但是,當我想刪除這個協會,before_destroy不會被觸發:

user.tv_shows.delete(show) 

但是,如果我破壞有關手動錄製,確實會觸發回調:

r = Relating.find(8012) 
r.destroy 

如何獲取dest之前羅伊被觸發了嗎?

由於

+0

這可能會幫助: :我http://stackoverflow.com/questions/1896777/cascade-delete-in-ruby-activerecord-models –

回答

1

delete方法如前所述in the docs here不會觸發回調。改爲嘗試destroy

更新:我沒有意識到你試圖摧毀連接記錄而不是顯示本身。我很驚訝delete工作,但也許這是has_many :through的功能。如何:

user.relateds.where(tv_show_id: show.id).destroy 
+0

想這也...什麼似乎發生是,1.記錄沒有從相關模型中刪除,2. TvShow已完全從tv_shows中刪除... – Paul

+0

是的,這確實有效......我不是很想這樣做,我希望我可以找到一種方法,當簡單地做user.tv_shows.delete(顯示)時,觸發before_destroy我不知道爲什麼before_destroy在這樣做時不起作用......無論如何,謝謝Ryan! – Paul