2016-06-01 7 views
0

möchte ich Bereiche und jeder Bereich mehrere Bilder durch area_attachments hat.Rails, fields_for erzeugen Felder für so viele Anhänge (auch 0), während ich nur/mindestens ein

Ich habe ein modal zu bearbeiten jeden Bereich.

Ich möchte auch area_attachments in jedem Bereich bearbeiten so habe ich eine f.fields_for in allen Bereichen Form.

<%first_rendered=false %> 
<%= f.fields_for :area_attachments do |aa| %> 
    <%unless first_rendered %> 
    <div class="field"> 
    <br> 
    <%= aa.file_field :image, :multiple => true, name: "area_attachments[image][]" %> 
    </div> 
    <% first_rendered=true %> 
    <% end %> 
<% end %> 

Weil es Ich möchte mehrere Upload ist nur ein Feld, so kann der Benutzer mehr Bilder zu einem Bereich hochladen.

Wie Sie sehen, ich habe ein first_rendered variabel, so dass, wenn ein Bereich mehr als ein area_attachments das Feld zeigt, nur einmal hat, gibt es keinen Grund für weitere Felder ist.

Aber wenn ein Bereich keine area_attachments überhaupt hat, wird das Feld überhaupt nicht angezeigt.

Was würden Sie vorschlagen, dass ich hier mache? Würden Sie auch etwas anderes anstelle dieser first_rendered Variable tun, die ich verwendete? Im Allgemeinen, wie würden Sie es tun, damit nur ein Feld erzeugt wird?

+0

Das ist also nicht wirklich ein Bearbeitungsformular (zumindest dieser Teil davon) - es ist eine neue Anlageform. Richtig? –

+0

@FrederickCheung Nun, dass Sie es sagen .. ja, es ist ein Feld, um mehr Bilder hochladen. Ich habe eine andere Möglichkeit hinzugefügt, um sie zu löschen. –

Antwort

0

Eigentlich, anstatt den Code in meiner Frage zu verwenden, habe ich Folgendes verwendet.

<%= f.fields_for :area_attachments, @area.area_attachments.build do |aa| %>    
    <div class="field"> 
    <br> 
    <%= aa.file_field :image, :multiple => true, name: "area_attachments[image][]" %> 
    </div>       
<% end %> 

Und es hat gut funktioniert. Die first_render Zeug war nicht einmal notwendig.

1

Wenn Sie nicht das Standardverhalten des Iterierens durch die Sammlung verwenden möchten, verwenden Sie nicht fields_for.

Wenn Sie den Eingang area_attachment_attributes[1][image][] benennen, sollte er immer noch accepts_nested_attributes verwenden, um neue AreaAttachment Objekte wie gewünscht zu erstellen. Die 1 im Namen der Eingabe ist in Ihrem Fall nicht wichtig, da Sie nur die Konstruktion eines Objekts zulassen möchten, aber ansonsten würde es verwendet werden, um die Parameter für jedes zu erstellende Objekt zu trennen.

+0

Ich fand herum im Stapelüberlauf etwas wie dieses: '<% = f.fields_for: comments, @ product.comments.build do | comment | %> ' Glaubst du, es würde in meinem Fall funktionieren? –

+0

In diesem Formular: '<% = f.fields_for: area_attachments, @ area.area_attachments.build do | aa | %> ' –

+0

Ich habe es so gelöst. Danke trotzdem, dass du versucht hast zu helfen. –

Verwandte Themen