gpt4 book ai didi

ruby-on-rails - 如何最好地 "merge"两个对象及其在 rails 中的关联?

转载 作者:行者123 更新时间:2023-12-04 15:38:02 24 4
gpt4 key购买 nike

这是我的情况:
我有 2 个 person 对象,person1 和 person2,它们是从两个不同的外部数据源创建的。我有一个我使用的手动过程,它确定了 person1 和 person2 实际上指的是同一个人,所以我想要做的是将它们“合并”为一个人,并删除重复项。

我对对象本身逐个字段执行此操作没有问题,但是变得棘手并且如果我做得不好将难以维护的事情是这些人有关联(不是我们所有人)。我想要做的是在将适当的字段复制到 person1(我将在以后使用)之后,我还想将关联从 person2 移动到 person1。

我认为我的问题归结为:有没有办法 1)迭代对象的每个关联,以及 2)确定该关联的外键字段。我很确定,如果我能够做这些事情,我可以编写一种方法,自动将每个关联记录从 person2 移动到 person1,并且如果我添加或删除关联,则不会更改该代码。

关于如何做到这一点的任何想法?

谢谢。

编辑:
我已经根据 Duncan 的回答中给出的指针实现了(在它似乎可以工作时尽可能快速和肮脏地)代码。以防万一这对任何人都有帮助,这是如何将所有关联对象从一个对象(在本例中为@p2)移动到另一个(@p1)的粗略概述。

Person.reflect_on_all_associations.each do |assoc|
if assoc.macro == :has_many
@p2.send(assoc.name).each do |assoc_obj|
assoc_obj.update_attribute(assoc.primary_key_name, @p1.id)
end
elsif assoc.macro == :has_one
@p2.send(assoc.name).update_attribute(assoc.primary_key_name, @p1.id)
end
end

最佳答案

要以编程方式检查 ActiveRecord 对象的关联,您需要使用 ActiveRecord::Reflection .此处定义的类方法返回由 ActiveRecord::Reflection::AssociationReflection 组成的集合。您可以从中提取外键、主键、表名等...

关于ruby-on-rails - 如何最好地 "merge"两个对象及其在 rails 中的关联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1197568/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com