显示上次访问/在个人资料页面上看到过

时间:2009-06-15 19:15:26

标签: ruby-on-rails

在此站点StackOverflow的个人资料页面中,有一个名为“Seen:2小时前”的元素 如何在Rails中实现这一点? 我用Google搜索,但找不到确切的代码!!

2 个答案:

答案 0 :(得分:2)

我应该想象一下,当您在Stack Overflow上创建一个帐户时,您的IP地址将存储在Users表的数据库中。然后,当您访问站点上的页面时,将从HTTP请求中检索IP地址,并在Users表中搜索匹配的IP地址。如果匹配,则使用表示上次访问的时间戳更新该用户记录。

当然,这种方法假设您网站的访问者拥有固定的IP地址,但情况可能并非如此,特别是对于使用拨号互联网连接的用户。

您可以在Rails模型中轻松记录当前的IP地址:

class SomeModel < ActiveRecord::Base
  def request=(request)
    self.ip_address = request.remote_ip #ip_address is a string
  end
end

然后在视图帮助器中,您可以执行以下操作:

def last_seen
  "Seen #{time_ago_in_words(Time.now - some_model.updated_at)} ago"
end

作为替代方案,该网站可以发布一个cookie,其中包含服务器要查找的访问时间戳。如果找到cookie,则读取时间戳并计算时间差。这种方法的问题在于,如果用户使用不同的Web浏览器或计算机(或两者),它就不起作用。

答案 1 :(得分:1)

另一方面,如果您的用户模型有一个名为“last_seen_at”的列,您可以为登录用户的每个请求更新它。不过,我认为这对数据库来说太沉重了......

Authlogic,用于用户身份验证的强大插件,将在您上次登录时更新魔术列,这与您要求的“最后一次看到”类似(尽管不完全相同)。