我需要一些帮助来解决我的问题。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