Практический пример реализации, ряд живых диаграмм (Highcharts), отражающих аспекты визитов за последний месяц - возможно увидеть в этом blog on rails по ссылке, открыв страничку Analytics (легко найдете в топ-меню):
Итак, формируем статистику по странам:
@locations = Ahoy::Visit.all.group(:country).count
, заменяя, при необходимости, nil на строку:
@locations = Ahoy::Visit.all.group(:country).count.map { |k, v| [k ||= 'undefined', v] }
Все то же самое относительно группировки по городам:
Ahoy::Visit.all.group(:city).count
, ну, или как посчитаете нужным; следующие фрагменты кода вполне прозрачно прояснят ситуацию:
@visits = Ahoy::Visit.all
@events = Ahoy::Event.all
<% @visits.each do |visit| %>
Visit Number: <%= visit.id %><br>
Visit Token: <%= visit.visit_token %><br>
Visitor Token: <%= visit.visitor_token %><br>
IP: <%= visit.ip %><br>
User Agent: <%= visit.user_agent %><br>
Referrer: <%= visit.referrer %><br>
Referring domain: <%= visit.referring_domain %><br>
Device Type: <%= visit.device_type %><br>
Country: <%= visit.country %><br>
Region: <%= visit.region %><br>
City: <%= visit.city %><br>
Latitude: <%= visit.latitude %><br>
Longitude: <%= visit.longitude %><br>
User ID: <%= visit.user_id %><br>
<% end %>
Вы можете пробовать любые группировки, селекты и итерации, например:
@events = Ahoy::Event.group("time::date").select("time::date as date, count(1) as count").map{|k| [k.date, k.count]}
Конечно, не бог весть что, за Google Analytics или Яндекс.Метрикой навряд ли угонишься. Но это все универсальные средства, призванные угодить на все вкусы; возможно, вы посчитаете, что индпошив лучше ширпотреба? При умелом использовании, хм... можно добиться многого.
Используем данные за определенный период времени только, ненужное удаляем:
Ahoy::Visit.where("started_at < ?", 2.years.ago).find_in_batches do |visits|
visit_ids = visits.map(&:id)
Ahoy::Event.where(visit_id: visit_ids).delete_all
Ahoy::Visit.where(id: visit_ids).delete_all
end