2013-03-31 31 views
5

我收到錯誤Rails的未定義的方法`strftime的「爲‘2013年3月6日’:字符串

未定義的方法`strftime的」爲‘2013年3月6日’:字符串

嘗試時使用strftime從字符串2013-03-06正常顯示日期(2013年6月3日,2013年6月或類似日期)。

,做這在我的index.html.erb,看起來像這樣

<td><%= task.duedate.strftime("%B %e, %Y") %></td>

我剛學Rails的,所以我相信這僅僅是一個愚蠢的錯誤初學者線,任何幫助將是讚賞。謝謝

+1

例如:d = Date.today#2008-08-12 d.strftime('%b%d,%Y')#將打印2008年8月12日 – Hackerman

+0

是否有一個特殊的原因,爲什麼你的duedate字段不是Date或DateTime類型的? – depa

+0

我剛剛在遷移中添加並填充日期列後遇到了此問題。解決方案只是重新啓動(我猜Rails不知道該屬性是否是一個日期?)。 – thewillcole

回答

27

它看起來像你的duedate是一個字符串,當strftime是一個時間/日期類的方法。你可以試試這個:

Date.parse(task.duedate).strftime("%B %e, %Y") 
+0

非常感謝你,這完美地工作。 – Colin

+0

感謝這也爲我工作(來自未來的訊息)=) –

0

您正在將日期時間存儲爲字符串而不是實際的日期時間。您將需要創建類似下面的

change_table :tasks do |t| 
    t.change :duedate, :datetime 
end 

這樣一個新的遷移,當你訪問交貨期將已經被解析爲一個DateTime對象,而不是你不必每次它轉換。

0

你也可以使用strptime。這是爲我工作:)

DateTime.strptime(task.duedate ,"%B %e, %Y") 
0

這解決了這個問題對我來說:

Date.created_at.try(:strftime, ("%B %e, %Y")) 

希望這有助於!

相關問題