作为偏执狂的行为不是恢复联想



我试图使用acts_as_paranoid宝石,但没有运气。 我有一个Client模型:

class Client < ActiveRecord::Base
    acts_as_paranoid
    has_many :purchases, dependent: :destroy
    has_many :payments, dependent: :destroy
end

当我用购买和/或付款摧毁客户,然后尝试恢复时,只恢复了客户,而不是关联。

> c = Client.find(231)
> c.payments.length
  Payment Load (0.6ms)  SELECT "payments".* FROM "payments" WHERE "payments"."client_id" = $1  [["client_id", 231]]
 => 1
> c.purchases.length
  Purchase Load (0.6ms)  SELECT "purchases".* FROM "purchases" WHERE "purchases"."client_id" = $1  [["client_id", 231]]
 => 1

如果我删除客户端:

> c.destroy

并运行Client.only_deleted,我看到刚刚删除的客户端。 但是,当我恢复它并尝试加载购买或付款时,没有。

> Client.only_deleted.first.recover
> c = Client.find(231) # success
> c.payments.length # fail
  => 0

不会恢复关联的记录。 我错过了什么吗?

我没有

意识到我需要运行:

bin/rails generate migration AddDeletedAtToControllerName deleted_at:datetime:index

对于所有关联的模型,并添加:

acts_as_paranoid

到模型的也是如此。 添加后,一切都按预期运行

发生这种情况的原因是因为 acts_as_paranoid 覆盖了 ruby 类的 destroy 方法。这意味着与dependent: :destroy的关联将像未在类上定义acts_as_paranoid时的行为相同,并且实际上会删除关联的记录。

因此,对于要防止永久删除的每个关联和从属记录,是的,您需要确保这些记录也具有acts_as_paranoid功能。

表示所有相关模型并添加: act_as_paranoid

 class Purchase < ActiveRecord::Base
   acts_as_paranoid
 end
 
 class Payment < ActiveRecord::Base
   acts_as_paranoid
 end

在这种情况下 c = Client.find(231)c.destroy

它可以在删除案例时正常工作,但是当您恢复该记录时,也不会从关联的记录中恢复任何内容。如果要从要使用act_as_paranoid软删除的模型中删除依赖项::d estroy

class Client < ActiveRecord::Base
  acts_as_paranoid
  has_many :purchases
  has_many :payments
end

这将为您工作。因为 ruby 类的销毁方法。这意味着与 dependent 的关联::d estroy 的行为将与未在类上定义acts_as_paranoid时的行为相同,并且实际上会删除关联的记录。

相关内容

  • 没有找到相关文章