Как реализовать категории класса в rails?

#ruby-on-rails

#ruby-on-rails

Вопрос:

Предположим, у меня на моем сайте есть разные товары, поэтому у меня есть такие классы, как ресторан, отель, поездка, аттракцион. Каждый тип продукта / услуг имеет свой собственный класс, потому что у них разные поля и некоторые специфические методы.

Как я могу классифицировать эти разные классы? Например, классифицировать все поездки и достопримечательности как «Мероприятия». Нужно ли мне создавать для этого суперкласс, даже если у них очень мало общей логики? Или, может быть, использовать переменную класса ‘@@category’?

Моя главная потребность — иметь возможность запрашивать все экземпляры классов, принадлежащих к определенным категориям.

Ответ №1:

Предполагается, что эти продукты могут принадлежать только к одной категории, и все продукты принадлежат к одной категории.

Создайте новую категорию модели (и таблицы).

Создайте любые категории, которые вам нужны (скажем, «Действия» и «Местоположения»).

Создайте новую таблицу product_categories с полями model (строка) и category_id (целое число).

Создайте исходные данные для категорий продуктов — что-то вроде model: Trip, category_id: 1

Вуаля, ваши поездки теперь являются активностью. Я предлагаю добавить область поиска по category_id, возможно, ассоциацию belongs_to с пользовательским соединением SQL.

Ответ №2:

Если есть изменения в поведении или полях, рассмотрите STI (наследование одной таблицы).

Если есть «большое» количество полей, которые отличаются друг от друга, я бы подумал о том, чтобы просто повесить материал на основную модель.

Комментарии:

1. На самом деле нет никаких изменений в поведении или полях, мне просто нужны категории для фильтрации содержимого. Что вы имеете в виду, когда зависаете от основной модели? Какой будет основная модель?

2. @oalo Я неправильно понял вопрос; Я думал, вы спрашиваете, как создать из них иерархию классов, а не просто иметь одну категорию для каждого типа. Хотя я бы все равно подумал об этом, если они похожи.