我正在使用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
如何才能触发之前的破坏?
由于
答案 0 :(得分:1)
delete
方法不会触发in the docs here提到的回调。请改为destroy
。
更新:我没有意识到你试图破坏连接记录而不是显示本身。我很惊讶delete
可以工作,但也许这是has_many :through
的一个特征。怎么样:
user.relateds.where(tv_show_id: show.id).destroy