2016-04-03 47 views
-1

我想格式化日期,如Thu, 10th Jan 2016。我寫了一個方法來獲取當前時間,並使其以上述格式顯示。未定義的方法`ordinalize'爲3:Fixnum(NoMethodError)

def time_format(ob_created_at) 
    ob_duplicate = ob_created_at 
    ob_duplicate = ob_created_at.strftime("%a") 
    day = ob_created_at.strftime("%d") 
    day = day.to_i.ordinalize 
    ob_duplicate = ob_duplicate + day + ob_created_at.strftime("%b %Y") 
end 

t = Time.now 
time_format(t) 

day是字符串。我試圖轉換爲int,並在其上應用ordinalize。它引發了一個未定義的方法錯誤。

+0

我沒有看到一個名爲'ordinalize'爲'Fixnum'任何方法。 – Aetherus

+0

你能檢查time_format方法中的最後一行嗎 – gates

+0

在'day = day.to_i.ordinalize'這一行中,'ordinalize'方法來自哪裏? – Aetherus

回答

1

Fixnum#ordinalize不在ruby核心庫中。見Ruby Doc

Fixnum#ordinalize主動支持這是軌道的相關性的一部分,這樣你就可以使用Rails應用程序這種方法免費,但在非軌項目,你必須安裝積極支持和需要至少active_support/core_ext/integer/inflections到可以訪問它。

3

ordinalize不是Ruby方法,但它是由Rails的ActiveSupport gem添加的。

我會爭辯說,當你需要的僅僅是一個簡單的方法時,將一個ActiveSupport gem dependency添加到你的項目是不值得的。找到它的執行here,也請不要上面的ordinal

所有你需要這兩種方法:

def ordinal(number) 
    abs_number = number.to_i.abs 

    if (11..13).include?(abs_number % 100) 
    "th" 
    else 
    case abs_number % 10 
     when 1; "st" 
     when 2; "nd" 
     when 3; "rd" 
     else "th" 
    end 
    end 
end 

def ordinalize(number) 
    "#{number}#{ordinal(number)}" 
end 
+0

非常感謝。我不知道爲什麼其他人不那麼富有同情心 – gates

+0

我希望我可以不止一次地對此讚不絕口。對於這一種方法,我一直在爲ActiveSupport奮戰幾天。 – Liz

相關問題