Dependent Destroy在Rails中不使用软删除的父级

时间:2016-01-04 17:30:25

标签: ruby-on-rails ruby-on-rails-4

以下是代码:

class SomeParent < ActiveRecord::Base

    has_one :some_child, dependent: :destroy

    def destroy
       self.update_attributes(deleted_at: Time.now)
    end

    def deleted?
       deleted_at.present?
    end
end

有人可以解释原因吗?此外,通常有一种更优选的方式来处理这个问题吗?

2 个答案:

答案 0 :(得分:1)

重写destroy方法时,callback applied to the original definition未应用于重写方法。一个简单的解决方法是使用所需的回调包装代码,如下所示:

def destroy
  run_callbacks :destroy do
    self.update_attributes deleted_at: Time.now
  end
end

答案 1 :(得分:0)

原因是上面的代码覆盖了ActiveRecord :: Base.destroy(),它负责所有的依赖。