Мягко удаленный объект из родительской модели недоступен в моей дочерней модели
Моему пользователю разрешено удалять некоторые из ресурсов, которые он создал сам, но когда он уничтожает ресурс, возникает проблема, потому что у меня есть модель, которая называется resourcequantity, которая зависит от модели ресурсов, и я не хочу создавать зависимую уничтожить, поскольку это повлияет на рабочие группы, которые мой пользователь уже создал (рабочая группа - это модель, содержащая несколько ресурсов через resource_quantities, см. ниже).
Я пытаюсь разрешить моему пользователю мягко удалять свои ресурсы, сохраняя ресурс в базе данных, чтобы сохранить все документы без изменений, даже если некоторые ресурсы были уничтожены.
Я в настоящее время использую драгоценный камень паранойи, и я попытался реализовать зависимый:: обнулить без большого успеха. При использовании гема паранойи я получил NoMethodError для класса nill, так как он будет искать только те ресурсы, для которых в поле удаленного_стука указано ноль.
Я немного растерялся и не знаю, с чего начать.
Вот мои три модели
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 ответ
Хорошо, эта проблема была решена путем определения ресурса как такового в моделях, которые принадлежали модели ресурсов.
def resource
Resource.unscoped {super}
end
благодаря паранойе я могу получить доступ к своим ресурсам из других моих моделей, даже если они были удалены из модели ресурсов. (Нет необходимости аннулировать отношения)
Resource.unscoped {super}
на самом деле он удаляет "WHERE ("resources"."dele_at" NULL)", который вы можете наблюдать в вашем консоле, что довольно удобно.