我有以下模型关联:
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
当我销毁
Slider
对象我认为 dependent => :destroy
会自动销毁 featured_item
但事实并非如此。slider Controller
def destroy
slider = Slider.find(params[:id])
slider.delete
render(:status => :ok, :nothing => true )
end
因此,我尝试使用
before_destroy
进行回调手动删除featured_item
当一个 slider 对象被销毁并且没有被调用时。我怎样才能得到
featured_item
删除 slider 对象时要删除吗?使用 Rails 3.2。
最佳答案
您刚刚观察到 delete
之间的区别和 destroy
.在您的 Controller 中,您调用
slider.delete
这将只执行一个 SQL
DELETE
但不会调用任何回调。这就是为什么在正常情况下你想使用 destroy
反而。它将获取对象(如有必要),调用包括递归销毁在内的回调,然后才从数据库中删除对象。请参阅 delete 的文档和 destroy了解更多信息。
关于ruby-on-rails - before_destroy 和依赖销毁不触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9866267/