Ruby on rails 不使用Rails中的软删除父级

Ruby on rails 不使用Rails中的软删除父级,ruby-on-rails,ruby-on-rails-4,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 class SomeParent

代码如下:

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
class SomeParent

有人能解释一下原因吗?另外,通常有更可取的方法来处理这个问题吗?

原因是上面的代码覆盖了ActiveRecord::Base.destroy(),后者负责处理所有依赖项

重写destroy方法时,未将应用于重写的方法。一个简单的修复方法是使用所需的回调来包装代码,如下所示:

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