2013-05-09 50 views
0

當我傳遞Rails time_ago_in_words方法的日期大於1個月前時,它返回一個字符串,其內容類似於「大約N個月前」。我需要將time_ago_in_words的結果顯示爲「天前」

反正有這個方法之日起paramater天返回的距離,即只在30天前,50天前,90天前等等

+0

如果差異小於1天會怎樣? – 2013-05-09 16:15:27

+0

如果距離<24小時,然後顯示分鐘或小時好 – Jason 2013-05-09 16:22:35

回答

3
class Time 
    def days_ago 
    diff = Time.now - self 
    return ago if diff < 86400 
    "#{"day".pluralize(diff.to_i/86400)} ago" 
    end 
end 

class Date 
    def days_ago 
    to_time.days_ago 
    end 
end 

或者作爲幫手:

def days_ago(date) 
    diff = Time.now - date.to_time 
    return date.ago if diff < 86400 
    "#{"day".pluralize(diff.to_i/86400)} ago" 
end 
+0

解決方案是正確的,但我會建議創建一個幫手,而不是重新打開日期和時間類。 – 2013-05-09 16:23:36

+0

@SimoneCarletti:使用兼容的輔助方法進行更新。 – PinnyM 2013-05-09 16:28:29

1

不,你不能。幫手不支持它,這裏是definition

但是,你的情況實際上比輔助邏輯簡單。您可以創建一個新的幫助器,從當前日期減去舊日期,然後將結果秒數除以(60 * 60 * 24),即一天中的秒數,然後獲得結果。

2

你可以對time_ago_in_words頂部定義自己的幫手:

def days_ago_in_words(time) 
    days = ((Time.now - time.to_time)/86400.0).round 
    if days > 1 
    I18n.t :x_days, :count => days, :scope => :'datetime.distance_in_words' 
    else 
    time_ago_in_words(time) 
    end 
end 

的關鍵的I18n和範圍來自distance_of_time_in_words,所以你不必自己定義。