我需要一些幫助來解決我的問題。Rails模型關聯和銷燬方法
我正在開發一個項目,在該項目中開發應用程序的管理員功能。我的問題與兩個Destroy函數有關,它們與它們自己如何相關:
簡化,我有3個模型(測試,應用程序和JoinTestJob)在代碼示例中描述。
我希望管理器只有在與任何應用程序的對象相關時才能銷燬JoinTestJob的對象。我需要應用程序對象的一致性。這就是我在JoinTestJob模型中創建before_destroy方法的原因。直到這裏工作正常。
我也希望管理器能夠銷燬一個Test的對象,並且與此相關聯的對象也應該被銷燬,正如Test模型中聲明的那樣。所以在這裏開始的問題:
當我刪除一個測試的對象,我可以看到在日誌中,所有的應用程序的對象關聯首先被刪除。之後,應該將JoinTestJob的對象刪除,但我得到了回滾。我知道回滾的原因是JoinTestJob中的before_destroy方法(我可以在日誌中看到它)。顯然,這個方法仍然可以找到應用程序的對象,即使我在日誌中看到它們被刪除。在這種情況下,看起來他們真的會在交易完成後被刪除。
那麼,我該如何完成這兩個功能的工作?
型號:
class Test < ApplicationRecord
has_many :applications, :dependent => :destroy
has_many :persons, through: :applications
has_many :join_test_jobs, :dependent => :destroy
has_many :jobs, through: :join_test_jobs
class Application < ApplicationRecord
belongs_to :join_test_job
belongs_to :person
class JoinTestJob < ApplicationRecord
belongs_to :test
belongs_to :job
before_destroy :check_relation_between_application_and_join_test_job
def check_relation_between_application_and_join_test_job
if Application.find_by(join_test_job_id: "#{self.id}")
self.errors.add(:base, "It's not possible to delete this item, because there are some applications related with. Please, delete them first.")
throw(:abort)
end
end
編輯1:
有關意見要求的日誌,它的真正基礎。我會問你們忽略圖像中的一些細節。我不得不將問題翻譯成英文,因此圖片中有一些葡萄牙文字。在日誌中觀察到的重要事項:
所有與Test相關的應用程序的對象都被首先刪除。然後,當rails開始查找JoinTestJob的對象時,您可以看到回滾。在回滾之前,由before_destroy方法觸發的應用程序發出最後一個請求,如日誌圖像中所示。在最後一個請求中調用throw(:abort)方法。
Word的翻譯:
Application/applications => Inscricao/inscricaos
JoinTestJob/join_test_jobs => JoinConcursoCargo/join_concurso_cargos
爲了澄清的事情,DadosPessoalCandidato和DadosPortadorDeficiencia與應用相關的模型和他們持有大約是誰申請,如地址和電話個人信息。他們可以被忽略。
編輯2:
添加什麼代表車型的更多信息,讓你們能更好地理解這個問題。
測試模型:這就像公務員考試,人們會申請找工作。誰會在考試中取得最好的成績將被選中。這個模型持有的信息:當這個考試會發生,在考試的規則有關的文件,當考試成績將被釋放等
JoinTestJob模式:它加入了一個工作和測試的概念提供這些工作。在這裏,我們可以找到的信息:作業的特殊性,如工作時段,多少元一天,工資工作等的時間
應用模式:這種模式保持與人相關的信息是誰申請提供工作的工作和測試。所以,我們可以在這裏找到這樣的信息:這個人申請什麼工作,他/她支付多少申請費用,測試(考試)的日期將會發生,個人信息如年齡,姓名,地址。一個人可以爲同一個測試申請多個工作。
我希望我可以幫助你們這些新的信息。
您可以將日誌添加到您的問題嗎? – Jeremie