0

Я создаю приложение журнала, которое будет работать для нескольких видов спорта (например, подводное плавание и дайвинг), и я пытаюсь найти способ имеют дочерние модели, наследующие не только родительские методы, но и родительские (базы данных) столбцы.Rails: модели, которые наследуют столбцы от родителя, и у каждого есть дополнительные столбцы

Изображение может лучше объяснить: Logbook database sample

Таким образом, любые модели под категории ScubaDiving, фридайвинга и прыжки с парашютом модели, которые я буду называть из взглядов.
Модели под Родительским или Дайвинг, однако, никогда не будут вызваны и предназначены только для заполнения своих детей столбцами базы данных (и, возможно, методами).

Каков наилучший способ создания моделей + ассоциации + наследование?

Из исследования я сделал, я читал:

  1. Single Table Inheritance:
    • будет передавать только родительские методы, а не столбцы базы данных
  2. полиморфные ассоциации :
    • Я сравнил свою ситуацию с примером, который я нашел (комментарии на фото s, articles, posts), но мой Divespot и Airport (эквивалент: Фото, статья) не могут иметь many Spots (eq: Comments).
  3. Multiple Таблица Наследование:
    • Не удалось заставить его работать, но это, казалось, ближе всего к тому, что я искал?
  4. Простые модели:
    • Я всегда мог создать модель для каждого ребенка (без родителей) и повторите код. Я все еще хотел посмотреть, есть ли способ рефактовать.

Я использую Rails 5 и базы данных PostgreSQL.

ответ

0
  1. Single Inheritance Таблица:
    • будет передавать только родительские методы, а не столбцы базы данных

Конечно все классы наследуют столбцы базы данных. Поскольку все классы «живут» в одной таблице, они имеют одинаковые столбцы. STI, вероятно, не лучшее решение в вашем случае по другой причине - столбцы кажутся разными для каждой модели, поэтому для моделей, которые не имеют этих столбцов, у вас будет множество столбцов «NULL».

Я бы предложил подумать о создании модели/таблицы для каждого из ваших классов, а затем привязать дочерние объекты к объекту, представляющему родителя. Затем вы можете делегировать такие методы, как имя, местоположение в Spot. Тогда вам, вероятно, придется работать с полиморфными ассоциациями. Вы можете быть немного причудливыми и попробовать «надлежащий» MTI, см. this guide

+0

Руководство было слишком сложно для меня, но я закончил тем, что сделал что-то подобное. Я создал полиморфную модель, к которой подключались аналогичные классы, позволяя им иметь доступ к общим столбцам. –

Смежные вопросы