3

克隆时,我在引用特定模型时遇到问题。我尝试过使用多种方法,但都没有得到正确的结果,我相信这与我不了解克隆的逻辑是如何工作的有关。

这涉及多个模型,但在层次结构中最后两个模型之间的相互依赖关系中会出现错误。为简单起见,我将尝试使用 3 个模型来解释这一点,以了解一切是如何工作的:Page、PageElement 和 PageElementDependency

  1. APage有很多PageElements
  2. APageElement有 manydependent_page_element_dependencies和 has_many dependee_page_element_dependencies,这两个关系都是PageElementDependency。通过这两个依赖项,我通过关系设置了以下 has_many:has_many :dependees, through: :dependent_page_element_dependencieshas_many :dependents, through: :dependee_page_element_dependencies. 总结一切看起来像这样:
#models/page.rb
has_many :page_elements, -> { order(position: :asc) }, inverse_of: :page, dependent: :destroy

  amoeba do
    enable
    clone [:page_elements]
  end

#models/page_element.rb
has_many :dependent_page_element_dependencies, foreign_key: :dependent_id, inverse_of: :dependent, class_name: "PageElementDependency", dependent: :destroy
  has_many :dependees, through: :dependent_page_element_dependencies
  has_many :dependee_page_element_dependencies, foreign_key: :dependee_id, inverse_of: :dependee, class_name: "PageElementDependency", dependent: :destroy
  has_many :dependents, through: :dependee_page_element_dependencies

  amoeba do
    enable
    clone [:dependee_page_element_dependencies, :dependent_page_element_dependencies]
  end

#models/page_element_dependency.rb
belongs_to :dependent, class_name: "PageElement", inverse_of: :dependent_page_element_dependencies, foreign_key: :dependent_id
  belongs_to :dependee, class_name: "PageElement", inverse_of: :dependee_page_element_dependencies, foreign_key: :dependee_id


假设我正在尝试使用 PageElement#4 和 PageElement#5 克隆 Page#3,其中有一个 PageElementDependency,其中依赖项是 PageElement#4,被依赖者(依赖者)是 PageElement#5。

所以基本上在这里我们可以访问PageElement.find(5).dependees=> PageElement#6,如果我这样做PageElement.find(6).dependents=> PageElement#5

因此,当尝试克隆 Page#3 时,我希望得到一个带有 PageElement#6 和 PageElement#7 的新 Page#4,这是重要的部分,一个 PageElementDependency,其中依赖项是 PageElement#6,依赖项是 PageElement #7。

但是,当我尝试克隆 PageElementDependencies 时,只有一列获得了新值,而另一列保留了旧​​ PageElement 的值。因此,在给出的示例中,我会得到一个 PageElementDependency,其中依赖项是正确的:PageElement#6,但依赖项没有更新并保持为 PageElement#5。

我不确定如何使用重映射器来获取依赖项的相关“新”和“旧”对象,所以我不确定如何继续。

我也在 github 上发布了这个问题:https ://github.com/amoeba-rb/amoeba/issues/84

4

0 回答 0