2016-06-29 6 views
0

ich die folgende SchleifeJede Do-Schleife, prüfen, ob Artikel ist der letzte

<% @museum.museumcloseddays.order(:closedday).each do |day| %> 
     <%= day.closedday.strftime("%B") + " " + day.closedday.day.to_s %> 
<% end %> 

Welche schreibt den Monat und den Tag der Veranstaltungsort geschlossen Tag.

Ich würde versuchen, sie mit einem Komma zu trennen, und wenn der | Tag | Element ist das letzte Element in jeder Schleife, schreibt einen Punkt.

Dann versuche ich den | Tag | zu testen Artikel unter Verwendung des Verfahrens zuletzt wie folgt:

if day.last then ... 

aber es funktioniert nicht ...

Antwort

2

Verwendung Array :: und Array wählen :: verbinden. Ein ganz einfaches Beispiel ist:

["a", "b", "c"].select { |i| "#{a}!" }.join(',') + '.' 

Dies ersetzt Ihre gesamte jede Schleife und Sie würden die Umwandlung der Ausgabe in dem Auswahlblock setzen. Wählen Sie wird ein Array Ihrer Ausgabezeichenfolgen erstellen, und Join wird sie mit einem Komma abgrenzen und nicht am Ende setzen.

Hier ist mein Versuch, es in Bezug auf Ihr Beispiel zu setzen:

<%= 
    @museum.museumcloseddays.order(:closedday).select do |day| 
    day.closedday.strftime("%B") + " " + day.closedday.day.to_s 
    end.join(',') + '.' 
%> 

ich nicht ganz sicher bin, ich habe die Details dieser Lösung richtig, weil ich spielen in nicht Sandbox müssen aber Ich weiß, dass der Ansatz von select then join das tun wird, was Sie tun wollen, ohne eine zusätzliche Überprüfung der Position Ihres "Tages" im Array durchzuführen.

+0

Vielen Dank @jaydel. Nicht sicher, warum, aber ich habe etwas komisches: # , # . Aber ich schob die Tage in ein neues Array: '@ days.push (day.closedday.strftime ("% B ") +" "+ day.closedday.day.to_s)'. Und dann folgendes nach der Schleife hinzufügen: '@days = @ days.join (',') + '.'' was perfekt funktioniert. – Maxence

+0

ist es möglich, dass Sie diese mittlere Zeile interpolieren müssen. Ich bin mir nicht sicher - ich habe nicht genug Kontext, um es tatsächlich zu testen. Select sollte zu einem Array von String-Objekten führen. – jaydel

+0

'" # {tag.closedday.strftime ('% B')} # {tag.closedday.day.to_s} "' – jaydel

0

Sie könnten .each_with_index und Druck Komma, wenn ihr nicht das letzte Element laufen z.B. index != size_of_museumclosedays

oder Druck Komma wenn museumclosedays[-1] != day