2015-03-13 52 views
0

在我的Rails應用程序中,我顯示created_at,比如month-day,如03-21。 但是,今年不是今年,這種預期可能會令人困惑,所以我想在年份不是Time.now.year時顯示2014-03-21。 這是我想出了紅寶石:如果不是今年,更好的顯示方式

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

但我認爲這個代碼是相當長了一點,有沒有這樣做的任何其他更好嗎?使用

回答

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)) %> 
+0

+1。在第一種解決方案中,您已經指定了相同的格式。也可能應該將其移入輔助方法。 – BroiSatse 2015-03-13 11:51:58

+0

修復了錯誤的C&P謝謝。是的,它應該從視圖中移出一個幫手甚至裝飾者。 – Almaron 2015-03-13 11:55:14

2

位短ternary operator

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

個人而言,我會用time_ago_in_words(tweet.created_at)幫手,這顯示了一個更直觀和人類可讀的時間戳。

+0

我認爲這取決於實際要求。 – BroiSatse 2015-03-13 11:53:56

+0

當然!我解釋了我通常如何處理這種情況,但由於有很多答案,他會選擇更適合他的要求的解決方案。 – bukk530 2015-03-13 15:10:04

0

您甚至可以使用的I18n做到這一點

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