在 Rails 中创建对象及其所有关联模型的副本

Posted

技术标签:

【中文标题】在 Rails 中创建对象及其所有关联模型的副本【英文标题】:Create a copy of an object and all its associated models in rails 【发布时间】:2013-07-23 19:33:21 【问题描述】:

我正在努力在 rails 及其所有相关的关联模型中创建对象的副本。但我无法找到解决方案。我不想使用像 Amoeba 这样的宝石。模型之间的关系是这样的。

class ClassToCopy
    has_many :cups
    has_many :cup_parts, through :cups
    belongs_to :xyz
end

所以我想保留一个像复制 ClassToCopy 这样的按钮,单击该按钮应该创建该对象的一个​​新副本,其中包含所有关联。就像 ClassToCopy 的对象有 10 个杯子和 4 个杯子零件一样,那么这些类的对应对象也应该被创建。 我尝试过使用 clonedup(使用 rails 3.2.x),但 clone 不会从原始对象创建新对象,并且 dup 不允许关联.因此,我很困惑该怎么做。

【问题讨论】:

【参考方案1】:

您可以覆盖 dup 以为每个关联返回一个新对象和一个新对象,例如:

class Thing
  has_many :cups

  def dup
    super.tap do |new_thing|
      self.cups.each do |cup|
        new_thing.cups << cup.dup
      end
    end
  end
end

【讨论】:

以上是关于在 Rails 中创建对象及其所有关联模型的副本的主要内容,如果未能解决你的问题,请参考以下文章

在没有在模型中定义的情况下在 rails 中创建 slug

如何在 RSpec (rails) 中创建或指定关联?

在 Rails 中传递没有模型关联的变量

在 Rails 中创建一个与 STI 一起使用的动态子类

如何在 Python 中创建对象的副本?

如何在 ActiveRecords 中创建对 Ruby 中对象的引用?