我想要做的是当用户正在查看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 %>
答案 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
但是(再次)我认为这不会有助于提高绩效。