Клонирование рельсов с амебой - PullRequest
0 голосов
/ 28 июня 2019

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

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

  1. A Page имеет много PageElements
  2. A 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...