我正在尝试实施“热门产品”功能。基本上,每次查看产品时,我都希望将该产品的视图数记录到数据库。我在哪里挂钩这样的东西?我已经看到了基于构建某种流量分析的东西,但我正在寻找能够使这个功能更多地与RoR应用程序耦合的想法。
答案 0 :(得分:4)
我假设控制器中有一个'view'方法,做类似
的操作@product = Product.find(params[:id])
如果产品有“观看次数”字段,您可以执行类似
的操作@product.views = @product.views + 1
@product.save
答案 1 :(得分:3)
写一个像@ eelco.lempsink.nl这样的@product.views
计数器说可能是一个完美的基本解决方案,但恕我直言会出现重大的可扩展性问题,如:
可能更具可扩展性(但非常非RoR)的解决方案是获取服务器日志并运行批处理以运行流行度计算(如每个IP等唯一),然后将此信息更新为RoR模型。
答案 2 :(得分:1)
像eelco.lempsink.nl建议的视图字段应该可行。要获得最受欢迎的商品,请添加以下内容:
:sort => "views DESC",
但要确保只计算人类对物品的看法。如果每次在热门项目列表中显示项目时计数增加,您将获得一个反馈循环,搞乱流行度系统。还要确保不允许webcrawler更改视图状态。
另外,你真的应该考虑你想要衡量的东西,对产品感兴趣的人数,或者误导的缩略图以及点击产品的高人气排名所欺骗的金额。
如果这是一个网上商店或类似网站,你最好不要计算买家数量而不是观看数量。这样可以更准确地衡量产品的实际利益(因为他们实际上对它有足够的兴趣花钱),而且我认为写到数据库看一个视图听起来有些不明智(还有更多的东西)观点而不是购买)。无论如何,您将获得比可能遭受反馈问题的views
字段更好的数据,因为您可以通过选择具有特定时间范围内的时间戳的产品的order
行数来获得流行度历史记录。从上周左右获得订单可能不会那么昂贵(对于非常长的时间段,结果可能应该被缓存)。
答案 3 :(得分:0)
根据您呈现内容的方式以及您对视图的真正想法,您可能希望完全依赖于此并使用Google / Microsoft分析等内容。他们在产品上投入了大量时间,让您随时了解各种有关流量的信息。
答案 4 :(得分:0)
我想说在一个单独的表中跟踪一些统计数据。例如:
products_views
-
PRODUCT_ID 用户身份 IP地址 created_at 的updated_at
这样,如果两个人同时查看,您不必担心锁定更新数据库中的视图字段。然后,您可以在后台处理此表以汇总统计信息。
答案 5 :(得分:0)
对于这种事情,我喜欢google analitics,然后使用API将图形提取到您的应用中。
这会否定所有“假”读取操作,还有大量其他信息可以跟踪和记录。