1

我正在开发一个社交网络,比如基于体育的 Twitter 和 Facebook 的混合体。我有一个名为 Post(id、user_id、receiver_id、message、created_at)的模型,我想缓存 Post 视图。

应用程序/视图/帖子/_post.haml

- cache post do
  %div
    .author= link_to post.user.full_name, post.user
    .message= post.message
    .timestamp= timestamp_for_post(post.created_at)

昨天一切正常,但是当我访问我的“主页”时,我意识到时间戳已被缓存。让我给你看一个例子:

伯纳·卡斯特罗
测试
不到一分钟前 - 评论道具删除

问题是它不应该显示“不到一分钟前”,而应该显示“昨天”。有没有办法不缓存时间戳?你有什么建议来解决这个问题?

我想通过 AJAX 调用来获取时间戳,但这很奇怪而且不好。

4

2 回答 2

1

不要渲染相对时间戳,而是在模板中渲染实际的非相对时间戳,然后使用Moment.js之类的东西将其转换为相对时间戳客户端。

这还有一个优点,如果用户打开页面足够长的时间,相对时间戳会改变,时间戳会自行更新。

您还应该考虑不缓存任何内容,直到您真正了解您网站上的内容很慢。缓存有很多这样的陷阱,过早的优化并不总是值得的。

于 2013-01-19T15:58:32.770 回答
0

您可以将时间戳移出缓存块

  %div
   - cache post do
      .author= link_to post.user.full_name, post.user
      .message= post.message
   .timestamp= timestamp_for_post(post.created_at)
于 2013-01-22T22:48:11.087 回答