克隆/复制ActiveRecord :: Base实例,包括属性

时间:2018-06-15 17:03:04

标签: ruby-on-rails activerecord

问题

我处于需要两个相同记录的 ActiveRecord :: Base 实例的位置。

副本的要求很简单:

  1. 两个实例必须代表相同的记录。
  2. 我应该能够在不影响其他实例的情况下更改一个实例的属性。
  3. #dup #clone

    我的第一个想法是使用 #dup #clone ,但这些方法存在以下问题:

    • #dup 创建新记录。请参阅:ActiveRecord::Core#dup
    • #clone 创建一个"浅"复制。这意味着如果我更改副本上的属性,则此属性也会在原始对象上更改。请参阅:ActiveRecord::Core#clone

    当前解决方案

    我目前有2个解决方案可以解决我的问题,但他们感觉不太合适。

    1. some_object_copy = SomeObject.find(some_object.id)

      此解决方案为数据库创建了一个额外的查询,some_object已经在内存中,因此不需要这样做。

    2. some_object_copy = SomeObject.instantiate(some_object.attributes)

      这个解决方案看起来太麻烦了。我觉得应该有一种更清晰的方式来创建副本。

    3. 是否有更简洁的方法来解决此问题?

0 个答案:

没有答案