允许我的用户删除自己创建的一些资源,但是当他销毁资源时,出现了问题,因为我有一个称为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
我不是最好的红宝石,因此,如果您有任何建议,请随时分享。预先谢谢你
答案 0 :(得分:0)
好了,通过在属于Resource模型的模型中定义资源来解决此问题。
def resource
Resource.unscoped {super}
end
由于偏执狂,即使从资源模型中删除了我的其他资源,我也可以访问我的资源。 (无需取消关系)
Resource.unscoped {super}
它实际上删除了您在控制台中可以看到的“ WHERE(“ resources”。“ deleted_at” NULL)“,这非常方便。