Я думаю, что мой вопрос лучше всего описывается в качестве примера. Предположим, у меня есть простая модель под названием «Вещь», и у нее есть несколько атрибутов, которые являются простыми типами данных. Что-то вроде ...Рекомендации по нескольким ассоциациям с одним классом в Rails?
Thing
- foo:string
- goo:string
- bar:int
Это не сложно. Таблица db будет содержать три столбца с этими тремя атрибутами, и я могу получить к ним доступ с чем-то вроде @ thing.foo или @ thing.bar.
Но проблема, которую я пытаюсь решить, происходит, когда «foo» или «goo» больше не может содержаться в простом типе данных? Предположим, что foo и goo представляют один и тот же тип объекта. То есть, они оба являются экземплярами «Whazit» только с разными данными. Так что теперь вещь может выглядеть так ...
Thing
- bar:int
Но теперь есть новая модель под названием «Whazit», который выглядит следующим образом ...
Whazit
- content:string
- value:int
- thing_id:int
До сих пор это все хорошо. Теперь вот где я застрял. Если у меня есть @thing, как я могу настроить его для ссылки на мои 2 экземпляра Whazit по имени (для записи «бизнес-правило» заключается в том, что у любой Thing всегда будет ровно 2 Whazits)? То есть, мне нужно знать, есть ли у Whazit у меня в основном foo или goo. Очевидно, что я не могу делать @ thing.foo в текущей настройке, но я бы это было идеально.
Моя первоначальная мысль заключается в том, чтобы добавить атрибут «имя» в Whazit, чтобы я мог получить Whatzits, связанный с моим @thing, а затем выбрать Whazit, который я хочу по названию таким образом. Это кажется уродливым.
Есть ли лучший способ?