#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 Я неправильно понял вопрос; Я думал, вы спрашиваете, как создать из них иерархию классов, а не просто иметь одну категорию для каждого типа. Хотя я бы все равно подумал об этом, если они похожи.