diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index d83690e..2dc4525 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -2,4 +2,16 @@ class ApplicationController < ActionController::Base # Prevent CSRF attacks by raising an exception. # For APIs, you may want to use :null_session instead. protect_from_forgery with: :exception + + before_filter :initial_or_add_stay_time + + def initial_or_add_stay_time + if current_user.present? + + else + @stranger = Stranger.find_or_create_by(session_id: session['session_id']) + @stranger.stay_seconds += 1 + @stranger.save + end + end end diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb index 91e59c2..c99b55f 100644 --- a/app/controllers/home_controller.rb +++ b/app/controllers/home_controller.rb @@ -3,8 +3,8 @@ def index if current_user.present? @greeting = "#{current_user.name} 谢谢你登陆了我们网站!你已经登陆了#{current_user.sign_in_count}次了,总共登陆时间是?分钟了。" else - @greeting = "你好,陌生人!你没有登陆,或者你还没有注册,但是你已经浏览这个页面?分钟了。" + @greeting = "你好,陌生人!你没有登陆,或者你还没有注册,但是你已经浏览这个页面#{(@stranger.stay_seconds/60).round(1)}分钟了。" end - @stat = "现在总共有#{User.all.size}个注册用户在查看这个网站,有?个陌生人在查看这个网站。" + @stat = "现在总共有#{User.all.size}个注册用户在查看这个网站,有#{Stranger.where(updated_at: 5.minutes.ago).size}个陌生人在查看这个网站。" end end diff --git a/app/models/stranger.rb b/app/models/stranger.rb new file mode 100644 index 0000000..27bbf71 --- /dev/null +++ b/app/models/stranger.rb @@ -0,0 +1,3 @@ +class Stranger < ActiveRecord::Base + validates :session_id, presence: true, uniqueness: true, :length => { :minimum => 2 } +end diff --git a/db/migrate/20150330141141_create_strangers.rb b/db/migrate/20150330141141_create_strangers.rb new file mode 100644 index 0000000..fb667d8 --- /dev/null +++ b/db/migrate/20150330141141_create_strangers.rb @@ -0,0 +1,10 @@ +class CreateStrangers < ActiveRecord::Migration + def change + create_table :strangers do |t| + t.string :session_id + t.integer :stay_seconds, :null => false, :default => 0 + + t.timestamps + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 7d43725..614395c 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,14 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20131121162928) do +ActiveRecord::Schema.define(version: 20150330141141) do + + create_table "strangers", force: true do |t| + t.string "session_id" + t.integer "stay_seconds", default: 0, null: false + t.datetime "created_at" + t.datetime "updated_at" + end create_table "users", force: true do |t| t.string "name", default: "", null: false