0

Wie kann ich zwei Arrays miteinander zu kombinieren, so dass zum Beispiel ...Wie kann ich zwei Arrays zu einem gemeinsamen Attribut kombinieren?

Day 1: Notes/form 
Day 2: Notes/form 
Day 3: Notes/form 
Day 4: Notes/form 
Day 5: Notes/form 

Wenn ein Benutzer dann eine Notiz am Tag 3 schafft es wie ...

Day 1: Notes/form 
Day 2: Notes/form 
Day 3: Notes/notes 
Day 4: Notes/form 
Day 5: Notes/form 

Den Code aussehen würde Monstrosität unten versucht, das Obige zu erreichen, aber die Iteration ist alles aus. Wenn zum Beispiel ein Hinweis an Tag 1 und Tag 3 erstellt wird, dann wird die Ausgabe aussehen ...

Day 1: Notes/notes # Shows both Day 1 and Day 3 note. Only want to show Day 1 note 
Day 1: Notes/form 
Day 2: Notes/form 
Day 2: Notes/form 
Day 3: Notes/notes # Shows both Day 1 and Day 3 note. Only want to show Day 3 note 
Day 3: Notes/form 
Day 4: Notes/form 
Day 4: Notes/form 
Day 5: Notes/form 
Day 5: Notes/form 

Herausforderungen/show

<% @challenge.dates_challenged.first(@challenge.days_challenged).each_with_index do |date, i| %> 
    <% @notes.each do |note| %> 
    Day <%= i + 1 %> 
    <% if note.notes_date.strftime("%m/%d/%y") == date.strftime("%m/%d/%y") %> 
     <%= render 'notes/notes' %> 
    <% else %> 
     <%= render 'notes/form', :date => date %> 
    <% end %> 
    <% end %> 
<% end %> 

Zur Erinnerung, ein Benutzer eine Herausforderung schafft. Eine Challenge hat das Attribut days_challenged. Der Benutzer wählt aus, wie viele Tage in Frage gestellt werden, d. H. 10, 15, 30 usw. Für jeden dieser Tage möchte ich eine Notiz/ein Formular anzeigen. Wenn der Benutzer dann eine Notiz an einem Tag eingibt, sollten die Notizen/das Formular auf der Vorstellungsseite durch diese Notiz ersetzt werden (kein Tag sollte mehr als eine Notiz enthalten).

+0

Es sieht so aus, als ob Sie die falsche Datenstruktur dafür verwenden ... Haben Sie überlegt, einen Hash zu verwenden? – photoionized

+0

Ich kann nicht herausfinden, wie man es integriert. Du meinst wie in den Controller etwas hinzufügen wie 'notes_for_date = @ notes.group_by (&: note_date)'? Ich kann es jedoch nicht in der Ansicht arbeiten @photoionized –

Antwort

1

Sie tun zu viel in der Schleife, die Sie verwenden, um die Notiz des Tages zu finden. Das sollte ungefähr richtig sein:

Dies ist immer noch zu viel Logik in der Ansicht.

  1. Wie kommentierte photoionisiert, wäre es einfacher, wenn @notes ein waren Hash, deren Schlüssel waren Date s und deren Werte waren Notes. Sie könnten dann die any? durch einen Hash-Lookup ersetzen.
  2. Es ist mir unklar, warum Sie strftime("%m/%d/%y") vergleichen müssen. Sie sollten nur Date s vergleichen können. (Wenn Sie das nicht tun, weil sie sich in verschiedenen Zeitzonen befinden oder etwas anderes, sollten Sie das beheben - das führt zu Verwirrung in Ihrer gesamten Anwendung.)
  3. Ich würde dates_challenged.first(@challenge.days_challenged) in eine Methode auf Challenge namens etwas extrahieren wie current_dates_challenged und verwenden Sie das in der Ansicht.
+0

Awesome! Dies beseitigt das Multi-Rendering der Notizen/Formulare, wenn mehrere Notizen erstellt werden. Zeigt immer noch mehrere Notizen pro Tag an. So wie am Tag 1 wird eine Notiz für Tag 1 und Tag 3 angezeigt, während nur die Note für Tag 1 für diesen Tag angezeigt werden sollte. Vielleicht könnten Sie mir helfen, mich zu führen. In Noten habe ich '<% @ notes.each do | note | %><% = note.notes_text%><% end %> '. In challenges_controller 'def show' habe ich' @ bemerkenswert = @challenge @ notes = @ bemerkenswert.notes @note = Note.new'. –

+0

Besser [bearbeiten Sie es in der Frage] (http://stackoverflow.com/posts/37012917/edit), oder möglicherweise fragen Sie einen neuen. Es ist zu schwer, einem Kommentar zu folgen. –

+0

Okay Dave, ich habe eine neue Frage gestellt:] Hoffentlich kannst du mir auch hier helfen: http://stackoverflow.com/questions/37013995/how-to-render-notes-who-note-note-date-date Danke so viel! –