# Terminal
bundle add ahoy_matey
bundle add faker
rails g ahoy:install
rails g scaffold article title content
# db/seeds.rb
25.times do
Article.create(
title: Faker::Lorem.sentence,
content: Faker::Lorem.sentences.join(' ')
)
end
# models/article.rb
class Article < ApplicationRecord
visitable :ahoy_visit
end
# db/migrate/20210704023417_create_articles.rb
class CreateArticles < ActiveRecord::Migration[6.1]
def change
create_table :articles do |t|
t.string :title
t.string :content
t.bigint :ahoy_visit_id
t.timestamps
end
end
end
# rails g migration add_ahoy_to_articles ahoy_visit_id:bigint
# articles_controller.rb
class ArticlesController < ApplicationController
include Trackable
...
def show
track "Viewed Article", title: @article.title
end
end
app/controllers/concerns/trackable.rb
module Trackable
extend ActiveSupport::Concern
def track(name, properties = {})
ahoy.track name, properties
rescue StandardError => error
# notify error tracker
end
end
# welcome_controller.rb
class WelcomeController < ApplicationController
def index
@visits = Ahoy::Visit.includes(:events).all
end
end
# views/welcome/index.html.erb
<table class='table'>
<tbody>
<% @visits.each do |visit| %>
<tr>
<td><strong><%= visit.ip %></strong></td>
<td><strong><%= visit.user_agent %></strong></td>
</tr>
<% visit.events.each do |event| %>
<tr>
<td><%= event.name %></td>
<td><%= event.properties %></td>
</tr>
<% end %>
<% end %>
</tbody>
</table>