Rails检测用户是否第一次访问

我试图让用户填写问卷,如果这是他们第一次访问该网站。

我的控制器设置如下:

class MainController < BaseController end class BaseController < ApplicationController before_filter :first_time_visiting? end class ApplicationController < ActionController::Base def first_time_visiting? if session[:first_time].nil? session[:first_time] = 1 redirect_to questionnaire_path unless current_user end end end 

当我关闭浏览器并重新打开它时,我总是被重定向到调查问卷。

您必须在浏览器中为该用户设置一个cookie,以便以后允许检测,即在用户关闭浏览器之后。 在rails中设置和读取cookie非常简单。 查看文档以获取一些示例用法。 http://api.rubyonrails.org/classes/ActionDispatch/Cookies.html

偶然发现这个问题,我的解决方案只是jquery并涉及设置localStorage(确保你有一个polyfill)。 隐藏您想要只显示一次的元素。

 $(function() { if ( localStorage.getItem('visited') ) { return; } var $el = $('.only-show-on-first-visit'); $el.slideDown(800); localStorage.setItem('visited', true); $el.find('.close').click(function() { $el.slideUp(); }); }); // polyfill if (!('localStorage' in window)) { window.localStorage = { _data : {}, setItem : function(id, val) { return this._data[id] = String(val); }, getItem : function(id) { return this._data.hasOwnProperty(id) ? this._data[id] : undefined; }, removeItem : function(id) { return delete this._data[id]; }, clear : function() { return this._data = {}; } }; } 

在用户表上添加“上次登录时间”字段。 当那是零时,foo和!nil做吧。