Я хотел бы знать, как эффективно делать заказы в Rails.Мы все знаем, что вы можете сделать простой заказ в Rails следующими способами:
Model.order("created_at ASC").limit(10)
В этом случае я просто вытягиваю первые 10 записей.Если бы я хотел добавить порядок, не ограниченный по времени, я мог бы создать столбец в модели (например, custom_ordering column
) и ввести значения для упорядочения объектов.В этом случае вы просто изменили бы вызов order("custom_ordering ASC")
.
НО, скажем, я хочу сделать заказ на основе предсказанных пользователем предпочтений.В этом случае невозможно создать новый столбец, потому что у каждого пользователя разные вкусы.Каким был бы разумный и эффективный способ решения этой задачи?
Одним из методов было бы создание алгоритма для прогнозирования пользовательского рейтинга объекта из модели с именем model_rating(object)
.Этот алгоритм выдаст положительное целочисленное значение их рейтинга.Если бы я пошел по этому пути, как бы я эффективно упорядочил модель?
Другим способом было бы установить алгоритм как model_entry.user_preference(user)
.Тогда я мог бы заказать по:
Model.all.sort! { |b, a| a.user_preference(user) <=> b.user_preference(user) }
Но это кажется мне неэффективным.Он должен вызвать все записи в модели и затем отсортировать их, что, даже если вы используете эффективные методы сортировки, такие как слияние или пузырьковая сортировка, приводит к низкой производительности на моделях с большим количеством записей.
Существуют ли другие путиЯ не рассматриваю?Кто-нибудь может указать мне правильное направление здесь?