Ruby:如果不是今年,那就更好地展示年份了

时间:2015-03-13 11:21:50

标签: ruby-on-rails

在我的Rails应用中,我显示created_at,如month-day,如03-21。 然而,当年份不是今年,这种类型的表达可能会让人感到困惑,所以当年份不是2014-03-21时,我希望显示Time.now.year。 这就是我想出来的

<% if tweet.created_at.year == Time.now.year %>
  <%= tweet.created_at.strftime("%m-%d") %>
<% else %>
  <%= tweet.created_at.strftime("%Y-%m-%d") %>
<% end  %>

但我认为这段代码有点长,还有其他更好的做法吗?

4 个答案:

答案 0 :(得分:2)

缩短使用ternary operator

<% tweet.created_at.year == Time.now.year ? tweet.created_at.strftime("%m-%d") : tweet.created_at.strftime("%Y-%m-%d") %>

答案 1 :(得分:2)

我看到2个选项。两者都很优雅,看看你喜欢什么。

1.按原样使用strftime。

<%= tweet.created_at.strftime( tweet.created_at.year == Time.now.year ? "%m-%d" : "%Y-%m-%d") %>

2.使用I18n.localize。假设你有两种本地化格式(例如fullshort)。

<%= I18n.l(tweet.created_at, format: (tweet.created_at.year == Time.now.year ? :short : :full)) %>

答案 2 :(得分:0)

就个人而言,我会使用time_ago_in_words(tweet.created_at)帮助器,这会显示更直观,更易读的时间戳。

答案 3 :(得分:0)

你甚至可以这样做

<%= tweet.created_at.strftime(tweet.created_at.year == Time.now.year ? "%m-%d" : "%Y-%m-%d") %>