Ruby on Rails 3 - Моделирование продуктов с множеством категорий / атрибутов - PullRequest
0 голосов
/ 31 марта 2011

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

Вариант использования, который я себе представляю, заключается в следующем: пользователь заходит на сайт в поисках подержанной кровати, просматривает несколько более высоких категорий, пока не найдет кровать правильного размера, что-то вроде этого:

Furniture
---> Couch
---> Dresser
---> Bed
-------> Size
----------> King
----------> Queen
...

Каждый раз, когда пользователь щелкает более узкую категорию, ему предоставляется меню со следующим уровнем детализации (в стиле NewEgg). При нажатии «Мебель» отображается вся мебель и появляется меню с типами мебели. При нажатии «Кровать» отображаются все кровати, и появляется меню, отображающее различные атрибуты кровати и т. Д.

Пока у меня есть родительский класс "Item", который содержит все атрибуты каждого предмета, продаваемого через веб-сайт (цена, описание и т. Д.). Я застрял с тем, что делать дальше.

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

Какой шаблон проектирования я должен использовать для чистой реализации этой модели? Я искал вложенные множества, но я не совсем уверен, что это путь. Любое руководство приветствуется.

Спасибо!

1 Ответ

4 голосов
/ 31 марта 2011

Ваши категории четко образуют дерево, поэтому, вероятно, вы думаете о дереве наследования классов. Тем не менее, вы правы, что это неправильная модель, так как подклассы не добавляют функциональность по сравнению с их родителями.

У вас должен быть один класс "Item", который является узлом в дереве категорий - со ссылками на его родительскую категорию (еще один "Item" или нулевой для корня) и его массив дочерних элементов (все "Item") s).

Правильным местом для хранения информации о древовидной структуре является база данных. В таблице элементов добавьте столбец «parent_id» в качестве внешнего ключа - в таблицу элементов.

Когда пользователь перемещается вниз по дереву, вы показываете подкатегории, запрашивая элементы, у которых parent_id равен текущему идентификатору элемента.

...