ruby-on-rails - before_destroy 和依赖销毁不触发

标签 ruby-on-rails activerecord 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

当我销毁 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/

相关文章:

ruby-on-rails - 查询数组内部值的事件记录

java - Retrofit 1.9 回调错误

javascript - 在不保存服务器的情况下在 Rails 3 应用程序中进行 base64 解码

javascript - 如何使用 AJAX 将数据从 ruby​​ Controller 发送到应用程序 javascript?

ruby-on-rails - 已设置 Cookie,但未发送到 Cloudfront

mysql - 在单个查询中捕获一列具有最高值的记录?

ruby-on-rails - 寻求帮助以防止添加包含太多列的表

ruby-on-rails - ActiveRecord::HasManyThroughAssociationNotFoundError

android - 什么是回调以及如何在 Android 中实现它们?

javascript - 这种情况下如何实现回调函数