从父模型中软删除的对象无法在我的子模型中访问

时间:2018-12-04 14:34:17

标签: ruby-on-rails ruby nested-forms ruby-paranoia

允许我的用户删除自己创建的一些资源,但是当他销毁资源时,出现了问题,因为我有一个称为resourcequantity的模型,该模型依赖于资源模型,并且我不想创建一个依赖销毁对象,因为它会影响用户已经创建的工作组(工作组是一个通过resource_quantities包含多个资源的模型,请参见下文)。

我要做的是允许我的用户轻柔地删除其资源,同时将资源保留在数据库中,以使所有文档保持不变,即使某些资源已被破坏。

我当前正在使用妄想症宝石,并且我尝试实现dependent::nullify没有大的成功。使用偏执狂宝石时,我在nill类上遇到了NoMethodError,因为它只会查找delete_at为null的资源。

我有点迷茫,也不是真正的起点。

这是我的三个模特

class Resource < ApplicationRecord
acts_as_paranoid

  has_many :workgroups, through: :resource_quantities
  has_many :resource_quantities, inverse_of: :resource, dependent: :nullify
  accepts_nested_attributes_for :resource_quantities, allow_destroy: true
end

class ResourceQuantity < ApplicationRecord

  belongs_to :workgroup, optional: true, inverse_of: :resource_quantities
  belongs_to :resource, optional: true, inverse_of: :resource_quantities
  accepts_nested_attributes_for :resource, :allow_destroy => true

  validates :workgroup, uniqueness: { scope: :resource }
end

 class Workgroup < ApplicationRecord
     acts_as_paranoid

   has_many :resource_quantities, inverse_of: :workgroup, dependent: :destroy
   has_many :resources,  through: :resource_quantities, dependent: :nullify


   accepts_nested_attributes_for :resource_quantities, allow_destroy: true
   belongs_to :contractor

   belongs_to :workgroup_library, optional: true
   validates :name, presence: true
 end

是否可以执行类似的操作来轻轻删除资源?

def total_cost_price
     total_cost_price = 0
     self.resource_quantities.each do |f|
       total_cost_price += f.resource.purchase_price
     end
     total_cost_price.round(2)
  end

我不是最好的红宝石,因此,如果您有任何建议,请随时分享。预先谢谢你

1 个答案:

答案 0 :(得分:0)

好了,通过在属于Resource模型的模型中定义资源来解决此问题。

  def resource
    Resource.unscoped {super}
  end

由于偏执狂,即使从资源模型中删除了我的其他资源,我也可以访问我的资源。 (无需取消关系)

Resource.unscoped {super}

它实际上删除了您在控制台中可以看到的“ WHERE(“ resources”。“ deleted_at” NULL)“,这非常方便。