Rails设计问题 - “现在热门”

时间:2011-09-24 06:59:59

标签: ruby-on-rails

我的网站上有多个模型。有建议和项目以及交易。

我创建了一个模板,显示了现在最热门的内容。我希望能够将其应用于上面提到的所有3个模型,并且想知道接近它的最佳方法。

显然,我可以在每个模型上添加“hotness_score”,然后运行cron每小时更新一次热度分数(通过我自己的算法)。然而,不方便的是,如果我想在我的网站上显示十大最热门的东西,我可能不得不从这些中的每一个中取出前十个最热门的对象,然后在内存中对它们进行排序。 (即使我可以缓存它们听起来也不是很愉快)。

我还考虑过创建一个名为Hotness的新模型,它具有以下属性:

  1. 类型
  2. 的object_id
  3. hotness_score
  4. LAST_UPDATED
  5. 关于这一点的好处是我只需要查询Hotness order_by'hotness_score DESC'.limit(10)并且我可以获得所有组合的前10名。

    您认为这是一个很好的实施吗?你觉得这有什么问题吗?

    有人可以通过更好的方法来解决这个问题吗?我欢迎所有的建议。

1 个答案:

答案 0 :(得分:0)

是的,我认为你所谈论的是一个多态模型。这是在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

那样的东西?