如果今天显示“今天”,则1天过去后会以有效的方式显示实际日期

时间:2014-11-08 13:45:16

标签: ruby-on-rails ruby ruby-on-rails-4

我想要做的是当用户正在查看post时,如果当前日期是今天,那么它应该说Today @ 3:35pm,但如果他们明天正在查看同一帖子,那么应该说Nov 8, 2014 @ 3:35pm

我知道这是一个简单的if语句......但是我担心每次加载页面时(尤其是我的Post#Index一次显示20个帖子)我必须这样做如果检查,则Date.today

有没有更优雅的方式来做到这一点并没有给我带来性能影响?

换句话说,我试图避免一个伪N + 1问题,在每次页面加载时不断点击Date.today。即这个问题是否有counter_cache解决方案?

以下是当前版本:

<% if post.created_at == Date.today %>
    Today @ <%= post.created_at.strftime("%l:%M %P") %>
<% else %>
    <%= "#{post.created_at.strftime("%B %e, %Y")} @ #{post.created_at.strftime("%l:%M %P")}" %>
<% end %>

1 个答案:

答案 0 :(得分:3)

我不认为表演是一个真正的问题。无论如何,您可以在模型中实现该逻辑

def display_created_at
  if created_at.today?
    "Today @ #{created_at.strftime('%l:%M %P')"
  else
    created_at.strftime("%B %e, %Y @ %l:%M %P")
  end
end

现在你可以在这里使用缓存,你可以缓存一个小时到期,每条记录,

def cached_display_created_at
  Rails.cache.fetch(["post", id, "display_created_at"], expires_in: 1.hour) do
    display_created_at
  end
end

但是(再次)我认为这不会有助于提高绩效。