2013-03-31 8 views
5

ich den Fehler bekommenRails nicht definierte Methode `strftime 'für "2013.03.06": String

nicht definierte Methode` strftime' für "2013.03.06": String

, wenn sie versuchen, Zeige ein Datum normal (3. Juni 2013 oder etwas Ähnliches) aus der Zeichenfolge 2013-03-06 mit strftime.

Die Linie, die in meinem index.html.erb tut und sieht aus wie diese

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

ich nur Rails lerne so bin ich sicher, dass es nur ein dummer Anfängerfehler ist, würde jede mögliche Hilfe sein geschätzt. Danke

+1

Beispiel: d = Date.today # 2008-08-12 d.straftime ('% b% d,% Y') # wird gedruckt 12. August 2008 – Hackerman

+0

Gibt es einen besonderen Grund, warum Ihr Feld duedate nicht ist der Date oder DateTime Typen? – depa

+0

Ich bin gerade auf dieses Problem gestoßen, nachdem ich eine Datumsspalte in einer Migration hinzugefügt und gefüllt habe. Die Lösung war einfach neu zu starten (ich vermute, Rails wusste nicht, dass das Attribut bis dahin ein Datum war?). – thewillcole

Antwort

27

Es sieht so aus, als wäre Ihr Duedate eine Zeichenkette, wenn strftime eine Methode für die Klasse Time/Date ist. Sie können dies versuchen:

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

Vielen Dank, das funktioniert perfekt. – Colin

+0

Danke das hat auch bei mir funktioniert (Nachricht aus der Zukunft) =) –

0

Sie speichern die Datetime als Zeichenfolge und nicht als tatsächliche Datetime. Sie müssen eine neue Migration wie folgt

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

auf diese Weise erstellen, wenn Sie Zugriff auf duedate es bereits als Datetime-Objekt analysiert worden haben wird, statt Sie es jedes Mal konvertieren zu müssen.

0

Sie können auch strptime verwenden. Es ist für mich arbeiten :)

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

Dies löste das Problem für mich:

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

hoffe, das hilft!

Verwandte Themen