我的网站上有多个模特。有建议和项目,也有交易。
我创建了一个模板,它显示了现在什么是热的。我想要能够应用到上述所有3种模式,并想知道最好的方式来处理它。
显然,我可以在每个模型上添加"hotness_score“,然后运行cron,每小时更新他们的热评分(通过我自己的算法)。然而,不方便的是,如果我想在我的网站上显示十大最热门的东西,我可能需要从每一个最热门的对象中提取前十位,然后在内存中对它们进行排序。(尽管我可以缓存它们,但听起来并不令人愉快)。
我还考虑过创建一个新模型,又名Hotness,它具有以下属性:
这样做的好处是,我只需查询Hotness order_by 'hotness_score DESC‘..limit( 10 ),就可以得到所有数据中的前10位。
你认为这是一个很好的实现吗?你觉得这个有什么问题吗?
有人能提出一些更好的方法来解决这个问题吗?我欢迎所有的建议。
发布于 2011-09-24 07:37:30
是的,我认为你说的是一个多态模型。在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像那样吗?
https://stackoverflow.com/questions/7537562
复制相似问题