Как использовать ahoy для отслеживания просмотров постов?

У меня есть несколько сообщений, и я просто хочу отслеживать все просмотры (включая людей без учетных записей) сообщений (то есть самой страницы). У меня есть два метода, которые я пробовал:

1-й метод

Я добавил это ahoy.track "Viewed Post", title: @post.id в свой контроллер и <%= Ahoy::Event.joins(:visit).where(name: "Viewed Post").uniq.count("visits.visitor_id") %> в свое представление. ```. Единственная проблема в том, что он отображает 0 и не меняется.

2-й метод

Добавил visitable в мою модель поста. Запустил миграцию, чтобы добавить идентификатор посещения к сообщениям. Также добавил <%= Post.joins(:visit).distinct.count(:visit_id) %> к моему представлению. Единственная проблема в том, что количество просмотров застряло на 1, и оно одинаково для всех сообщений.

Что я делаю не так?


person guest0197    schedule 19.07.2020    source источник


Ответы (1)


Я тоже какое-то время боролся с этим. Я смог в основном заставить его работать.

Ваш второй метод не будет делать то, что вы хотите, потому что он отслеживает что-то еще. Вместо того, чтобы отслеживать количество просмотров поста, он отслеживает 1 просмотр. Он отслеживает представление, которое использовалось для создания публикации. Он делает это, присоединяя представление к модели.

Ваш первый метод близок к тому, что вы хотите. Однако все события, которые вы храните, на самом деле не хранят в них идентификатор посещения, поскольку события не делают этого по умолчанию. Вам нужно добавить 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:, он позволит отслеживать только просмотры для контроллера сообщений с определенным идентификатором. Visit_tokens уникальны для пользователя и истекают через заданное настроенное время (по умолчанию 8 часов), поэтому он будет отслеживать повторных пользователей, только если они просматривают страницу после настроенного времени.

Далее, чтобы прочитать количество просмотров, вы можете поместить что-то подобное в контроллер, где бы вы ни хотели видеть просмотры (в режиме просмотра, редактирования и т. д.):

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

А затем в своих представлениях вы можете просто использовать @views


Примечание. Вы не должны устанавливать :properties как одно значение, а скорее должны содержать хэш. Однако я не смог понять, как заставить его работать.

person announcerreactor    schedule 12.01.2021