如何合并两个ActiveRecord对象,包括关联

时间:2018-06-01 19:46:08

标签: ruby-on-rails rails-activerecord

在我们的Rails应用程序中,我们有多个记录对应于同一个真实世界的人。假设我们已经明确地识别出两个匹配的记录。我想通过调用old_person.merge(new_person)将新记录合并到旧记录中,包括所有关联,其中mergePerson上的方法。它应该像Hash#merge一样工作,但是递归地合并关联而不是仅仅覆盖它们。

我可以使用我们当前的架构在Person模型上手动编写逻辑。但如果可以使用ActiveRecord::Reflection动态完成遍历关联图,那将更加健壮且面向未来。我甚至可以在#merge中定义Concern,并在从include继承的所有类中ActiveRecord::Base定义merge。这样,每个关联都可能以递归方式调用belongs_to

在我能想到的几种情况下可能会出现并发症:scope或设置错误的其他关联方法,关联方法的选项(例如merge s)等。

所以 -

  1. 有没有办法使用我忽略的宝石或内置功能?
  2. 是否有一种更简单的方法来实现合并记录及其任意复杂关联的目标,而不是我所描述的,但没有将关联信息硬编码到attach-artifact方法中?
  3. 我已经提到了一些并发症。还有其他我没想过的并发症吗?这可能是不可能或不可行的;如果是这样,我会特别感谢第1项和第2项的答案。

0 个答案:

没有答案