我的网站上有多个模型。有建议和项目以及交易。
我创建了一个模板,显示了现在最热门的内容。我希望能够将其应用于上面提到的所有3个模型,并且想知道接近它的最佳方法。
显然,我可以在每个模型上添加“hotness_score
”,然后运行cron每小时更新一次热度分数(通过我自己的算法)。然而,不方便的是,如果我想在我的网站上显示十大最热门的东西,我可能不得不从这些中的每一个中取出前十个最热门的对象,然后在内存中对它们进行排序。 (即使我可以缓存它们听起来也不是很愉快)。
我还考虑过创建一个名为Hotness的新模型,它具有以下属性:
关于这一点的好处是我只需要查询Hotness order_by'hotness_score DESC'.limit(10)并且我可以获得所有组合的前10名。
您认为这是一个很好的实施吗?你觉得这有什么问题吗?
有人可以通过更好的方法来解决这个问题吗?我欢迎所有的建议。
答案 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
那样的东西?