Клонирование рельсов с амебой

У меня возникают проблемы со ссылками на конкретную модель при клонировании. Я пытался использовать несколько подходов, но ни один из них не дал правильного результата, и я считаю, что это связано со мной, не понимая, как работает логика клонирования.

Это включает в себя несколько моделей, но ошибка возникает во взаимозависимости между двумя последними моделями в иерархии. Для простоты я попытаюсь объяснить это с помощью 3 моделей, чтобы понять, как все работает: Page, PageElement и PageElementDependency

  1. Page имеет много PageElements
  2. PageElement имеет много dependent_page_element_dependencies и has_many dependee_page_element_dependenciesгде оба эти отношения PageElementDependency, Через обе эти зависимости я установил следующие отношения has_many: has_many :dependees, through: :dependent_page_element_dependencies а также has_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


Допустим, я пытаюсь клонировать страницу №3 с PageElement#4 и PageElement#5, где есть PageElementDependency, где зависимым является PageElement#4, а зависимым (от которого зависит) является PageElement#5.

Так что в основном здесь мы сможем получить доступ PageElement.find(5).dependees => PageElement#6и если я сделаю PageElement.find(6).dependents => PageElement#5,

Итак, при попытке клонировать страницу № 3 я ожидал получить новую страницу № 4 с PageElement#6 и PageElement#7, и вот важная часть, PageElementDependency, где зависимым является PageElement#6, а зависимым является PageElement#7.

Однако, когда я пытаюсь клонировать PageElementDependencies, только один из столбцов получает новое значение, а другой столбец сохраняет старое значение PageElement. Таким образом, в приведенном примере я получил бы PageElementDependency, где зависимый является правильным: PageElement#6, но зависимый не обновляется и остается как PageElement#5.

Я не уверен, как использовать переназначение для того, чтобы получить связанный "новый" и "старый" объект зависимостей, поэтому я не совсем уверен, как действовать дальше.

Я также опубликовал это как проблему в github: https://github.com/amoeba-rb/amoeba/issues/84

0 ответов

Другие вопросы по тегам