# Generate statistics, around events, by date or place class StatsController < ApplicationController before_action :set_temporal, :set_local, only: [:index] private def set_temporal @years = Event.group(year_grouping).count @months = Event.group(year_grouping, month_grouping).count end def set_local @regions = Event.joins(:region).group(:region_id, year_grouping).count @city_events = Event.group(:city).having('count(city) > 3') .order('count(city) desc').count end def year_grouping if %w[Mysql2 MySQL PostgreSQL].include? Event.connection.adapter_name 'extract(year from start_time)' elsif Event.connection.adapter_name == 'SQLite' 'strftime("%Y", start_time)' end end def month_grouping if %w[Mysql2 MySQL PostgreSQL].include? Event.connection.adapter_name 'extract(month from start_time)' elsif Event.connection.adapter_name == 'SQLite' 'strftime("%m", start_time)' end end end