Мягко удаленный объект из родительской модели недоступен в моей дочерней модели - PullRequest
0 голосов
/ 04 декабря 2018

Моему пользователю разрешено удалять некоторые из ресурсов, которые он сам создал, но когда он уничтожает ресурс, возникает проблема, потому что у меня есть модель, которая называется resourcequantity, которая зависит от модели ресурса, и я не хочусоздайте зависимое уничтожение, так как это повлияет на рабочие группы, которые мой пользователь уже создал ( рабочая группа - это модель, содержащая несколько ресурсов через resource_quantities, см. ниже ).

То, что я пытаюсь сделать, - это позволить моему пользователю мягко удалять свои ресурсы, сохраняя ресурс в базе данных, чтобы сохранить все документы без изменений, даже если некоторые ресурсы были уничтожены.

В настоящее время я использую драгоценный камень паранойи, и я попытался внедрить зависимый:: обнулить без большого успеха.При использовании гема паранойи я получил NoMethodError для класса nill, так как он будет искать только те ресурсы, для которых selected_at равен нулю.

Я немного растерялся и не знаю, с чего начать.

Вот мои три модели

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 голосов
/ 04 декабря 2018

Хорошо, эта проблема была решена путем определения ресурса как такового в моделях, которые принадлежали модели ресурсов.

  def resource
    Resource.unscoped {super}
  end

благодаря паранойе я могу получить доступ к своим ресурсам из других моих моделей, даже если они были удалены из модели ресурсов.(Нет необходимости обнулять отношения)

Resource.unscoped {super}

фактически удаляет «ГДЕ (« ресурсы ».

...