2013-02-06 03:16:51 +08:00
|
|
|
class UserVisit < ActiveRecord::Base
|
2013-02-28 11:39:42 +08:00
|
|
|
|
2015-07-08 00:31:07 +08:00
|
|
|
def self.counts_by_day_query(start_date, end_date)
|
|
|
|
where('visited_at >= ? and visited_at <= ?', start_date.to_date, end_date.to_date).group(:visited_at).order(:visited_at)
|
|
|
|
end
|
|
|
|
|
|
|
|
# A count of visits in a date range by day
|
2014-11-05 06:08:39 +08:00
|
|
|
def self.by_day(start_date, end_date)
|
2015-07-08 00:31:07 +08:00
|
|
|
counts_by_day_query(start_date, end_date).count
|
|
|
|
end
|
|
|
|
|
|
|
|
def self.mobile_by_day(start_date, end_date)
|
|
|
|
counts_by_day_query(start_date, end_date).where(mobile: true).count
|
2013-02-28 11:39:42 +08:00
|
|
|
end
|
2013-04-05 14:43:48 +08:00
|
|
|
|
|
|
|
def self.ensure_consistency!
|
|
|
|
exec_sql <<SQL
|
2013-10-04 11:28:49 +08:00
|
|
|
UPDATE user_stats u set days_visited =
|
2013-04-05 14:43:48 +08:00
|
|
|
(
|
2013-10-04 11:28:49 +08:00
|
|
|
SELECT COUNT(*) FROM user_visits v WHERE v.user_id = u.user_id
|
2013-04-05 14:43:48 +08:00
|
|
|
)
|
|
|
|
WHERE days_visited <>
|
|
|
|
(
|
2013-10-04 11:28:49 +08:00
|
|
|
SELECT COUNT(*) FROM user_visits v WHERE v.user_id = u.user_id
|
2013-04-05 14:43:48 +08:00
|
|
|
)
|
|
|
|
SQL
|
|
|
|
end
|
2013-02-06 03:16:51 +08:00
|
|
|
end
|
2013-05-24 10:48:32 +08:00
|
|
|
|
|
|
|
# == Schema Information
|
|
|
|
#
|
|
|
|
# Table name: user_visits
|
|
|
|
#
|
|
|
|
# id :integer not null, primary key
|
|
|
|
# user_id :integer not null
|
|
|
|
# visited_at :date not null
|
2014-02-07 08:07:36 +08:00
|
|
|
# posts_read :integer default(0)
|
2015-07-08 00:31:07 +08:00
|
|
|
# mobile :boolean default(FALSE)
|
2013-05-24 10:48:32 +08:00
|
|
|
#
|
|
|
|
# Indexes
|
|
|
|
#
|
|
|
|
# index_user_visits_on_user_id_and_visited_at (user_id,visited_at) UNIQUE
|
2015-09-18 08:41:10 +08:00
|
|
|
# index_user_visits_on_visited_at_and_mobile (visited_at,mobile)
|
2013-05-24 10:48:32 +08:00
|
|
|
#
|