ruby-on-rails - 如何使用 ahoy 跟踪帖子的浏览量?

标签 ruby-on-rails ahoy

我有多个帖子,我只想跟踪帖子(因此页面本身)的所有 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/

相关文章:

ruby-on-rails - rails 和 Ahoy : No route matches [GET] "/ahoy/visits"

ruby-on-rails - Carrierwave 未在 Rails 5 中保存图像

css - 如何编辑CarrierWave的 'Choose file'按钮和 "No file chosen"文本的CSS? (Rails4)

ruby-on-rails - 使用 Activemerchant gem 的多个商家帐户

ruby - 如何使用 Ahoy gem 跟踪其他帖子数据?

ruby-on-rails - Ahoy 的访问如何进行?

除非我直接将 JavaScript 包含在 View 中,否则 JavaScript 无法工作

ruby-on-rails - 使用表单助手设置tabindex的自动方法

ruby-on-rails - Ahoy 不记录事件或访问