在关系模型上的before_destroy

时间:2012-06-26 22:36:48

标签: ruby-on-rails callback associations

我正在使用has_many通过关联,并且无法将before_destroy回调触发。我正在使用Relating类来关联模型。

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

如何才能触发之前的破坏?

由于

1 个答案:

答案 0 :(得分:1)

delete方法不会触发in the docs here提到的回调。请改为destroy

更新:我没有意识到你试图破坏连接记录而不是显示本身。我很惊讶delete可以工作,但也许这是has_many :through的一个特征。怎么样:

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