Следите за обновлениями в комментариях.
Я изо всех сил пытался получить четкий и прямой ответ на этот вопрос, я надеюсь, что на этот раз я его получу! : D Мне определенно есть чему поучиться с Rails, однако я понимаю проблему, с которой сталкиваюсь, и был бы очень признателен за дополнительную помощь.
- У меня есть модель под названием «Задача».
- У меня есть абстрактная модель под названием «Мишень».
- Я хотел бы связать несколько экземпляров подклассов Target с Task.
- Я не использую наследование одной таблицы.
- Я хотел бы запросить полиморфную связь, чтобы вернуть смешанный результирующий набор подклассов Target.
- Я хотел бы запросить отдельные экземпляры подклассов Target, чтобы получить задачи, с которыми они связаны.
Итак, я полагаю, что полиморфные отношения «многие ко многим» между задачами и подклассами целей в порядке. Более подробно, я смогу делать такие вещи в консоли (и, конечно, в другом месте):
task = Task.find(1)
task.targets
[...array of all the subclasses of Target here...]
Но! Предполагая, что существуют модели «Магазин», «Программное обеспечение», «Офис», «Транспортное средство», которые являются подклассами «Целевого объекта», было бы неплохо также рассмотреть взаимосвязь в другом направлении:
store = Store.find(1)
store.tasks
[...array of all the Tasks this Store is related to...]
software = Software.find(18)
software.tasks
[...array of all the Tasks this Software is related to...]
Таблицы базы данных, подразумеваемые полиморфными отношениями, похоже, способны выполнять этот обход, но я вижу некоторые повторяющиеся темы в попытках найти ответ, который, на мой взгляд, побеждает дух полиморфных отношений:
- Используя мой пример, люди, похоже, хотят определить Store, Software, Office, Vehicle в Task, что, как мы можем сразу сказать, не является полиморфным отношением, поскольку оно возвращает только один тип модели.
- Как и в предыдущем пункте, люди по-прежнему хотят определять Магазин, Программное обеспечение, Офис и Транспортное средство в Задаче как одностороннюю форму или форму. Важным моментом здесь является то, что отношения слепы к подклассу. Изначально с моими полиморфами будут взаимодействовать только как с целями, а не как с отдельными типами их подклассов. Определение каждого подкласса в Task снова начинает разрушать цель полиморфных отношений.
- Я вижу, что модель для таблицы соединений может быть в порядке, что мне кажется правильным, за исключением того, что она добавляет некоторую сложность, с которой, как я предполагал, Rails будет готов покончить. Я ссылаюсь на неопытность в этом вопросе.
Кажется, это небольшая дыра либо в функциональности рельсов, либо в коллективных знаниях сообщества. Надеюсь, stackoverflow сможет вести хронику моих поисков ответа!
Спасибо всем, кто помогает!