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