before_destroy和dependent destroy不会解雇

che*_*ell 11 activerecord ruby-on-rails callback

我有以下模型关联:

class Slider < ActiveRecord::Base
  has_one :featured_happening, :as => :featured_item, :dependent => :destroy   
  before_destroy :destroy_featured_happening
  after_create :create_featured_happening
end

class FeaturedHappening < ActiveRecord::Base
  belongs_to :featured_item, :polymorphic => true
end
Run Code Online (Sandbox Code Playgroud)

当我摧毁一个Slider物体时,我认为dependent => :destroy会自动摧毁featured_item它,但事实并非如此.

滑块控制器

 def destroy    
    slider = Slider.find(params[:id])
    slider.delete
    render(:status => :ok, :nothing => true )
  end
Run Code Online (Sandbox Code Playgroud)

所以我尝试了一个回调before_destroy来手动删除featured_item滑块对象被销毁时没有被调用的东西.

我怎样才能获得featured_item被删除时,我删除滑块对象?使用Rails 3.2.

Hol*_*ust 21

你只需观察之间的差异deletedestroy.在你的控制器中你打电话

slider.delete
Run Code Online (Sandbox Code Playgroud)

它只会执行一个SQL,DELETE但不会调用任何回调.这就是为什么在正常情况下你想要使用destroy.它将获取对象(如果需要),调用包括递归销毁的回调,然后从数据库中删除该对象.

有关更多信息,请参阅有关删除销毁的文档.