2013-03-31 14 views
5

sto ottenendo l'erroreRails metodo non definito `strftime 'per "2013/03/06": String

metodo non definito` strftime' per "2013/03/06": String

quando si cerca di visualizzare una data normalmente (3 giugno 2013 di domenica o qualcosa di simile) dalla stringa 2013-03-06 usando strftime.

La linea che fa questo nel mio index.html.erb e assomiglia a questo

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

sto solo imparando Rails quindi sono sicuro che è solo un errore di principianti stupido, qualsiasi aiuto sarebbe apprezzato. Grazie

+1

Esempio: d = Date.today # 2008-08-12 d.strftime ('% b% d,% Y') # verrà stampato il 12 agosto 2008 – Hackerman

+0

Esiste un motivo speciale per cui il campo duedate non è dei tipi Date o DateTime? – depa

+0

Mi sono appena imbattuto in questo problema dopo aver aggiunto e compilato una colonna di date in una migrazione. La soluzione stava semplicemente ricominciando (credo che Rails non sapesse che l'attributo era una data fino ad allora?). – thewillcole

risposta

27

Sembra che il tuo duedate sia una stringa, quando strftime è un metodo per la classe Time/Date. Potete provare questo:

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

Grazie mille, funziona perfettamente. – Colin

+0

Grazie anche a questo ha funzionato (messaggio dal futuro) =) –

0

Si sta memorizzando il datetime come stringa e non come un vero datetime. Sarà necessario creare una nuova migrazione come il seguente

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

In questo modo quando si accede dueDate sarà stato già analizzato come un oggetto datetime, invece di dover convertire ogni volta.

0

È anche possibile utilizzare strptime. Si sta lavorando per me :)

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

Questo risolto il problema per me:

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

Spero che questo aiuti!