Rails 3:如何判断用户之前是否访问了某个页面?

时间:2011-02-14 16:37:59

标签: ruby-on-rails ruby-on-rails-3 cookies

我有一个Rails应用程序(使用Authlogic进行身份验证)和一个简单的jquery动画,我只想在第一页加载时运行一次。我知道关键是检查cookie或其他东西,以查看用户之前是否访问过该页面。请原谅我的n00bness,我对HTTP cookie或会话几乎一无所知。

那么,查看访问用户(即使他们尚未登录)是否第一次查看页面的最佳方法是什么?

编辑:好的,所以我意识到我并不完全清楚。

我花了好几个小时查看类似的问题并阅读用于Cookie和会话的Rails API文档,但我仍然无法想象如何为我网站中的每个网页实现访问过的?功能只有在用户第一次访问页面后才会设置为“true”。我查看了所谓的“重复”问题 Rails Detect If User's Very First Visit 以及相应的答案,但仍无法弄明白。

这是我的“页面”控制器:

def home
    @title = "Home"
end

def contact
    @title = "Contact Us"
end

DD

我的jquery javascript做了一个简单的动画:

$(document).ready(function() 
 {
if (!$.cookie('visited')) {
    $('.title .flying-text').css({opacity:0});
    $('.title .active-text').animate({
        opacity:1,
        marginTop: "-150px",
        }, 5000);
}
 });

我只希望它显示用户之前是否未访问该页面。我不知道如何在Rails中正确设置cookie,也不知道如何设置它,也不知道如何确保动画脚本可以访问完全相同的cookie值。有人可以帮我一把吗?

〜丹

2 个答案:

答案 0 :(得分:4)

您可以像这样设置一个cookie:

cookies[:welcomed] = {:value => true, :expires => Time.now + 6.months}

并从jquery创建一个小函数

function readCookie(name) {
    var nameEQ = name + "=", ca = document.cookie.split(';');
    for (var i = 0; i < ca.length; i += 1) {
        var c = ca[i];
        while (c.charAt(0) === ' ') { 
            c = c.substring(1, c.length);
        }
        if (c.indexOf(nameEQ) === 0) {
            return c.substring(nameEQ.length, c.length);
        }
    }
    return null;
}

并将其称为#in js

  if (readCookie('welcomed') == null){}

答案 1 :(得分:3)

忽略Javascript中的cookie。

使用引用为重复的问题,使用永久性cooke,并在第一次运行时,在Rails上设置一个类(让我们说first-run)。然后,检查您的javascript,看看body是否有课程first-run。此时,您可以让javascript执行它的第一个运行代码。