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

时间:2011-02-14 02:18:33

标签: ruby-on-rails session

如果是第一次访问该网站,我正在尝试让用户填写调查问卷。

我的控制器设置如下:

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

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

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:1)

偶然发现这个问题,我的解决方案只是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 = {}; }
  };
}

答案 2 :(得分:0)

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