У меня есть проблема, которая, я считаю, является основной для большинства разработчиков RoR.На самом деле, речь идет скорее о «понимании», чем о его программировании (я уже программировал несколько модулей, чтобы иметь возможность расширить ActiveRecord :: Base, чтобы можно было легко создавать связанные с Ext-JS вещи без каких-либо проблем).
Давайте рассмотрим простой пример, я буду говорить на ORM-ориентированном языке, а не на языке базы данных / модели.
- ThirdParty - это базовая сущность, имеющая общий член с именем «label».
- Экземпляр ThirdParty может быть Клиентом, Поставщиком, обоими или ни одним из них (так что Клиент / Поставщик похожи на конкретные интерфейсы, а не на унаследованные классы).
- Как Заказчик, так и Поставщик имеют специализированных членов, которые для большинства из них уникальны для каждого соответствующего класса (Клиент / Поставщик не разделяют много данных, кроме поля метки, с которым они связаны через ThirdParty).
Я пытался делать разные вещи:
- ThirdParty
- Клиент
- Поставщик
[редактировать] пропустил мое объяснение здесь.я имел в виду: один экземпляр ThirdParty может быть клиентом, поставщиком, ОБА ИЛИ НЕТ.Как отметил первый комментатор, мой пример может быть не лучшим ... Вы можете заменить «ThirdParty» на «Character», а «Customer» / «Supplier» на «Archer» / «SwordsMan».Персонаж может быть один, два, оба или ни одного, но предоставит информацию о любом экземпляре Персонажа.Методы get в Archer / SwordsMan должны возвращать экземпляры Character, «реализующие» контракт интерфейса, а не просто возвращать их экземпляр с помощью «getter» для объекта персонажа.[/ EDIT]
Также я попробовал:
- ThirdParty
- Customer
- Поставщик
Но мне это кажется немного "уродливым", потому что я должен сделать Customer.find (что-то).third_party.label для доступа к данным, «унаследованным» моими «интерфейсами».
Кроме того, я мог бы включить поле customer_id и supplier_id в мою модель ThirdParty, но это тоже не кажется правильным, потому что одна ThirdPartyможет быть и то, и другое, или ни одного из них ...
И, конечно, я хотел бы найти решение, которое не является препятствием / слишком много взлома, чтобы позволить мне, например,затем сделайте некоторую полиморфную ассоциацию для другой модели (например, адресуемой или комментируемой, контактной и т. д.)
Я также много читал на эту тему, как в таком блоге: http://mediumexposure.com/multiple-table-inheritance-active-record/ ... но я потерялся в правильном способе сделать это (В большинстве документов, которые я нашел по этому вопросу, неясно, относится ли это к Rails 1, 2, 3 ... Что недавно было реализовано по этому вопросу и т. Д.).
Может кто-нибудь предоставить мне различные"современные" веб-сайты или пример, соответствующий приведенному мною примеру?
Заранее я благодарю всех вас за то, что выкрасили мой вопрос, и вкратце объясните мне различные методы, используемые в отношении этого конкретногоsubject.
PS: Если вам нужно, чтобы я объяснил больше, что я ищу, я могу попробовать ... Но имейте в виду, что мой английский немного "ограничен" в этой области, так как ям относительно новый для RoR.