Для ассоциаций полиморфных c существует две цитаты о том, как они соединяют две или более моделей.
При ассоциациях полиморфных c модель может принадлежать более чем одна другая модель , для одной ассоциации.
источник: https://guides.rubyonrails.org/v5.2/association_basics.html#polymorphic -ассоциации
Но мы не хотим Чтобы связать модель с другой произвольной моделью, мы хотим иметь любую произвольную модель, связанную с ней самой. Но мы хотим больше, чем просто reflexivity
-отношение, nesting
.
Начиная с примера, приведенного в Руководстве по самостоятельному объединению,
class Employee < ApplicationRecord
has_many :subordinates, class_name: "Employee",
foreign_key: "manager_id"
belongs_to :manager, class_name: "Employee"
end
есть способ создания вложенного полиморфа c self- вступить в ассоциацию ? (звучит немного дерзко, как «черепашки-ниндзя-подростки». Надевает бандану и заказывает пиццу по итальянскому псевдониму в любом случае.)
Например, дерево, которое может состоять из нескольких моделей?
Я все еще немного не уверен с ограничением :foreign_key
, опцией :polymorphic
и типом reference
и тем, что они производят / как они работают вместе. Все они, кажется, делают примерно то же самое. Это их миграции. А именно, создание одного поля с идентификатором другого экземпляра того же класса или создание двух полей с именем_таблицы (string
) и некоторым экземпляром_экземпляра (BigInt
). Но насколько тонкой может быть их совместная работа, мне все еще не хватает понимания.
Если мы упакуем код в module
, мы не сможем хотя бы использовать аргумент base
из self.included(base)
для class_name
ключ с base.name
уже?