我有多个帖子,我只想跟踪帖子(因此页面本身)的所有 View (包括没有帐户的人)。我尝试过两种方法:
第一种方法
我添加了这个ahoy.track "Viewed Post", title: @post.id
在我的 Controller 和 <%= Ahoy::Event.joins(:visit).where(name: "Viewed Post").uniq.count("visits.visitor_id") %>
以我的观点。```。唯一的问题是它显示 0 并且没有改变。
第二种方法
已添加visitable
到我的帖子模型。运行迁移以将访问 ID 添加到帖子中。还添加了<%= Post.joins(:visit).distinct.count(:visit_id) %>
以我看来。唯一的问题是观看次数停留在 1,并且所有帖子的观看次数都相同。
我做错了什么?
最佳答案
我也为此苦苦挣扎了一段时间。我基本上能够让它工作。
您的第二种方法不会执行您想要的操作,因为它正在跟踪其他内容。它不跟踪帖子的浏览量,而是跟踪 1 个单一 View 。它跟踪用于创建帖子的 View 。它通过将 View 附加到模型来实现这一点。
您的第一个方法接近您想要的。然而,您存储的所有事件实际上并未在其中存储访问 ID,因为默认情况下事件不会执行此操作。您需要自己添加visit_id,通常添加到事件的属性变量中。
这是您需要做的:
首先,您将跟踪代码放置在 Controller 中(最有可能在“显示”部分):
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
通过将帖子 ID 放在名称中,以及文本“帖子:”,它将让它仅跟踪具有特定 ID 的帖子 Controller 的 View 。 Visit_tokens 对于用户来说是唯一的,并且在给定的配置时间(默认 8 小时)后过期,因此它只会跟踪重复用户,如果他们在配置时间之后查看页面
接下来要读取 View 计数,您可以在 Controller 中任何您想要查看 View 的位置(在显示、编辑等中)放置类似的内容:
@views = Ahoy::Event.where(name: "Post:#{@post.id}").count
然后在你的 View 中你可以只使用@views
注意:您不应该将 :properties 设置为单个值,而应该将其保存为哈希值。但是我不知道如何让它工作。
关于ruby-on-rails - 如何使用 ahoy 跟踪帖子的浏览量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62985113/