Вопрос по дизайну рельсов - «Горячий прямо сейчас» - PullRequest
0 голосов
/ 24 сентября 2011

У меня есть несколько моделей на моем сайте.Есть предложения и предметы, а также предложения.

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

Очевидно, что я могу добавить «hotness_score» к каждой из этих моделей, а затем запустить cron, чтобы обновлять их показатель жары каждый час (по моему собственному алгоритму).Тем не менее, неудобно то, что если я хочу отобразить десятку самых горячих вещей на своем сайте, мне, возможно, придется взять десятку самых горячих объектов из каждого из них, а затем отсортировать их в памяти.(Хотя я могу их кешировать, это звучит не очень приятно).

Я также думал о создании новой модели, известной как Hotness, которая имеет следующие атрибуты:

  1. Введите
  2. object_id
  3. hotness_score
  4. last_updated

Хорошо, что мне нужно только запросить Hotness order_by 'hotness_score DESC'.limit (10), и я могу объединить 10 лучших из всех.

Как вы думаете, это хорошая реализация?Вы видите какие-либо проблемы с этим?

Может кто-нибудь пролить свет на лучший подход к этой проблеме?Я приветствую все предложения.

1 Ответ

0 голосов
/ 24 сентября 2011

Да, я думаю, что вы говорите о полиморфной модели. Это довольно стандартный способ сделать это в Rails:

create_table :hot_things do |t|
  t.column :item, :polymorphic => true # item_id, item_type
  t.column :score
  t.timestamps
end

class HotThing < ActiveRecord::Base
  belongs_to :item, :polymorphic => true
end

Что-то в этом роде?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...