Rails: Human-freundliches Datumsformat für text_field

8

Ich habe ein Geburtsdatum-Feld, das als Datetime-Wert gespeichert ist. Die Standardschienen von Helfern spucken ein nicht allzu freundliches Format aus, z. "2008-06-10 22: 33: 19.000000". Das Folgende ist der Vanilla Rails Way.

%Vor%

Wie kann ich einfach ein Format anwenden? Ich habe verschiedene Ansätze ausprobiert, zum Beispiel sollte strftime funktionieren, dachte ich. Aber wenn ich Folgendes versuche, erhalte ich einen Fehler undefined method 'strftime' for nil:NilClass

%Vor%

Gestützt auf einige andere Fragen / Antworten habe ich Folgendes versucht. Es funktioniert für Nicht-Null-Werte, aber es ist hässlicher Code, und es funktioniert nicht für leere Werte (tatsächlich zeigt es das heutige Datum an).

%Vor%

Beim Spielen scheint es so zu sein, dass die Ausgabe von f.object.birth_date als Date und nicht als Datetime behandelt wird. Wenn es jedoch im Feld text_field (Original, hässliche Formatierung) angezeigt wird, enthält es die Zeit. Es ist Freitag Nachmittag, und mein gemeinsamer Mangel an Vertrautheit mit Rails Formen und rubinroten Datum / Zeit Objekten macht mich töricht.

Jeder einfache Weg, um mein Formular zu erhalten, um nichts anzuzeigen, wenn null / leer, und ein freundliches Datum sonst?

    
Ben Morris 21.10.2011, 20:53
quelle

2 Antworten

10

Wenn Sie eine leere Zeichenfolge wünschen, wenn birth_date leer ist, sollten Sie vorher überprüfen, dass birth_date nicht nil ist:

%Vor%

Wenn Geburtsdatum nil ist, wird :value auf nil gesetzt.

    
Claw 21.10.2011, 21:12
quelle
3

Haben Sie versucht, die Helpermethode date_select form builder zu verwenden? Sie können auch datetime_select verwenden, aber es sieht so aus, als ob Sie nur mit dem Datum arbeiten möchten.

%Vor%

Die API-Dokumentation befindet sich hier: Ссылка Fügen Sie die gewünschten Optionen hinzu.

Ich habe immer diesen Ansatz oder eine JavaScript-Datumsauswahl wie diese Version von jQuery UI verwendet. Es gibt heutzutage Plugins für die meisten JS-Frameworks.

Wenn es sich um ein text_field handeln muss, verwenden Sie eine Analysebibliothek für menschliche Sprachen wie chronisch . Es funktioniert, aber Sie müssen die Eingabe aus dem Formular irgendwo analysieren, bevor Sie das Attribut auf Ihr Objekt anwenden.

    
Matthew Lehner 21.10.2011 21:13
quelle

Tags und Links