2

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

第一种方法

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

第二种方法

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

我究竟做错了什么?

4

1 回答 1

2

我也为此苦苦挣扎了一段时间。我大部分时间都能让它工作。

您的第二种方法不会做您想做的事,因为它正在跟踪其他内容。它不跟踪帖子的浏览量,而是跟踪 1 个单一浏览量。它跟踪用于创建帖子的视图。它通过将视图附加到模型来做到这一点。

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


这是你需要做的:

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

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:”,它将让它只跟踪具有特定 id 的 Post 控制器的视图。visit_tokens 对用户来说是唯一的,并且在给定的配置时间(默认 8 小时)后过期,因此它只会跟踪重复用户,如果他们在配置的时间之后查看页面

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

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

然后在您的视图中,您可以使用 @views


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

于 2021-01-12T02:08:19.573 回答