2017-01-27 1 views
1

Ich versuche, ein f.select mit den letzten 6 Tagen mit Tag-Namen zu füllen. Ich will das Feld durch ihre Tagnamen vorgestellt, aber intern möchte ich das Datum vor JETZT speichern, das der Tagname darstellt.Füllen Sie ein f.select von Tag-Namen, die sich auf die letzten 6 Tage beziehen

Dies wird mir die letzten Tage geben, welche die Daten sind, die ich speichern möchte. Ich möchte das Auswahlfeld mit diesen Daten füllen, aber nur mit den Tag-Namen. Wenn ich dies tun ....

@days.each do |d| 
    @daynumber = d.wday 
end 

Dann bekomme ich ...

Datum :: dayNames [@daynumber]

..... ERROR..It kippe Implizit konvertiert Array in Integer.

Keine Ahnung.

Antwort

0

Sie sind auf dem richtigen Weg, aber Sie müssen über dieses Array iterieren, um die Tagname-Lookup zu arbeiten. Glücklicherweise hat Ruby geniale eingebaute Methoden, um genau das zu tun, und Enumerable#map ist vielleicht das nützlichste.

Versuchen Sie folgendes:

Oder wenn Sie aus einem anderen Grund die Zwischenarrays nicht benötigen, können Sie das Ganze in einer einzigen Zeile wie folgt tun:

>> day_names = 6.downto(0).map { |number| Date::DAYNAMES[number.days.ago.wday] } 
=> ["Saturday", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday"] 
+0

Vielen Dank für Ihre Hilfe, aber ich bin noch nicht ganz da. Auf meinem Formular wähle ich die Tage aus, an denen ich das Datumsformat speichern möchte. Also habe ich das versucht ... f.select: backup, @ days.map {| d | Datum :: DAYNAMES [d.wday]}. Es speichert ein Datum in einem Datumsformat, aber unabhängig von der Auswahl speichert es nur das aktuelle Datum und nicht das ausgewählte Datum, das sich auf den ausgewählten Tag bezieht. Mache ich die Form falsch? –

0

I habe es herausgefunden, während ich Karten erforsche und sammle.

<%= f.select :backup, @days.collect { |d| [ Date::DAYNAMES[d.wday], d ] } %> 

Das funktioniert! Danke Community, dass Sie mir geholfen haben, meine Frage zu korrigieren und auf eine Antwort zu zeigen.

Verwandte Themen