Я тоже какое-то время боролся с этим. Я смог в основном заставить его работать.
Ваш второй метод не будет делать то, что вы хотите, потому что он отслеживает что-то еще. Вместо того, чтобы отслеживать количество просмотров поста, он отслеживает 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