如何使用 ahoy 跟踪帖子的浏览量?

How to use ahoy to track views of posts?

我有多个 posts,我只想跟踪 posts(页面本身)的所有视图(包括没有帐户的人)。我尝试了两种方法:

第一种方法

我已将此 ahoy.track "Viewed Post", title: @post.id 添加到我的控制器中,并将 <%= Ahoy::Event.joins(:visit).where(name: "Viewed Post").uniq.count("visits.visitor_id") %> 添加到我的视图中。```。唯一的问题是它显示 0 并且没有变化。

第二种方法

已将 visitable 添加到我的 post 模型中。 运行 将访问 ID 添加到 post 的迁移。还在我的视图中添加了 <%= Post.joins(:visit).distinct.count(:visit_id) %>。唯一的问题是观看次数停留在 1,并且所有 post 都是相同的。

我做错了什么?

我也为此苦苦挣扎了一段时间。我基本上能够让它工作。

您的第二种方法不会执行您想要的操作,因为它正在跟踪其他内容。它不跟踪 post 有多少视图,而是跟踪 1 个视图。它跟踪用于创建 post 的视图。它通过将视图附加到模型来实现。

你的第一种方法接近你想要的。但是,您存储的所有事件实际上都没有在其中存储访问 ID,因为默认情况下事件不会这样做。您需要自己添加 visit_id,通常添加到事件的属性变量中。


这是您需要做的:

首先,您将把跟踪代码放在控制器中(很可能在“显示”部分):

if not Ahoy::Event.where(name: "Post:#{@post.id}", properties: current_visit.visit_token).exists?
   ahoy.track "Post:#{@post.id}", current_visit.visit_token
end

通过在名称中放置 post id 以及文本“Post:”,它将让它仅跟踪对 Post 控制器的视图,具有特定ID。 visit_tokens 对一个用户是唯一的,并且在给定的配置时间(默认 8 小时)后过期,因此它只会跟踪重复用户如果他们在配置时间后查看页面

接下来要读取视图计数,您可以在控制器中任何您想查看视图(显示、编辑等)的地方放置类似这样的东西:

@views = Ahoy::Event.where(name: "Post:#{@post.id}").count

然后在你的视图中你可以只使用@views


注意:您不应该将 :properties 设置为单个值,而是它应该包含一个散列。但是我无法弄清楚如何让它工作。