2016-10-21 2 views
2

Ich bin ziemlich neu bei Rails und Carrierwave.Carrierwave Bild Upload zurück leer bei Params

Ich habe dieses Formular, das eine jquery modale Box mit etwas dynamischem Code zeigt, um 1 bis N Bilder anzuzeigen, die vom Benutzer gewählt werden, als er auf den Dateiknopf klickt.

enter image description here

Das ist meine wird Eingabedatei, zusammen mit seiner Form (ich habe den Rest html entfernt, wie es zu diesem Zweck der Veranschaulichung meines Problems irrelevant scheint): mein

<%= simple_form_for [:project, ConsolidatedDocument.new], html: { role: 'form' } do |f| %> 
... 
<input type="file" name="photo[files][]" multiple="multiple" id="file_upload_input"> 
... 
<%= f.button :button, class: 'btn btn-primary btn-xs' %> 
... 
<% end %> 

Bei Controller, versuche ich alle Werte der Formulareingaben zu speichern, die scheinbar automatisch erscheinen, wenn ich den Knopf drücke.

Das Problem ist, dass jeder Wert, der mit der Eingabedatei kommen sollte, vollständig leer ist, und ich kann nicht den Grund finden, warum es leer ist. Hier ist meine params wenn einreichen schlagen:

(byebug) params 
{"utf8"=>"✓", "authenticity_token"=>"xESj3za30Y9CBXqG6P3MHm9axNGsRY/+ejsiMLYfIPVyto7CAnTVYdhW5xBMlzpiBKPbXq2h0tfE8KYnXtmkVg==", "photo"=>{"files"=>[""]}, "macro_types_1"=>{"id"=>"4"}, "doc_types_create_1"=>{"id"=>"127"}, "macro_types_0"=>{"id"=>"5"}, "doc_types_create_0"=>{"id"=>"141"}, "document_checklist_comment"=>{"photo_ids"=>["87611", "87612"]}, "button"=>"", "controller"=>"consolidated_documents", "action"=>"create", "project_id"=>"524"} 

Sehen Sie, dass "Foto" => { "Dateien" => [ ""]} besteht darauf, in den kommenden leer. Wie gesagt, ich habe keine Erfahrung mit Rails und obwohl ich StackOverflow für ähnliche Probleme durchsucht habe, scheint es, dass meins anders ist als die, nach denen ich hier gesucht habe.

Irgendwelche Vorschläge?

Edit:

als Update, ich habe mit meiner Form gebastelt, indem Sie die Datei manuell vorbei, wenn ich ConsolidatedDocuments.new nennen, etwa so:

post_attributes = params.require(:consolidated_document).permit(:name, :file, :document_type_id, :project_id, :user_id) 
       @consolidated_document = ConsolidatedDocument.new("name" => @file_name, "file" => @file_string, "document_type_id" => params["doc_types_create_"+i.to_s]["id"],"project_id" => @project.id, "user_id" => current_user.id)       

Dann habe ich, dass ganz gleich bemerkt Was ich als Wert für diesen "file" => @file_string Teil übergebe, wird "file" immer als nil rendern.

Hier ist, wie mein Objekt wie Speichern des Schlagens zur Zeit aussieht:

(byebug) @consolidated_document 
#<ConsolidatedDocument id: nil, name: "4f70d1b892066f849ee88222b7251ac6.jpg", file: nil, deleted: false, deleted_at: nil, document_type_id: 141, project_id: 524, user_id: 409, created_at: nil, updated_at: nil> 

Datei besteht null in comming out! Woher?

+0

Haben Sie folgten https://github.com/carrierwaveuploader/carrierwave # multiple-file-uploads – Sajan

+0

Ja @sajan. Es ist nicht die erste Bild-Upload-Routine, die in diesem System eingebaut ist. Daher wurden alle Parametrierungen und Konfigurationen bereits richtig eingestellt. Es scheint mir, dass die Natur sowohl dieses Multifile-Uploads als auch die Tatsache, dass es einige dynamisch erzeugte Eingaben enthält, die Ursache für diese Implementierung ist. Ich versuche es jetzt genau unter die Lupe zu nehmen. –

Antwort

1

Ich denke, das Problem mit simple_form_for.Try haben,

**<%= simple_form_for :project, url: url_for(controller: "consolidated_documents", action: "create"), html: { role: 'form' } do |f| %> 
... 
<input type="file" name="photo[files][]" multiple="multiple" id="file_upload_input"> 
... 
<% end %>** 

Auch browse Eingang ist nicht mit der Form verbunden sind und somit params erscheint nur, wenn alle Dateien, die zum Zeitpunkt Vorlage vorhanden sind. Ihr Schaltflächenfeld ist nicht mit der Dateieingabe verknüpft. Könnte besser sein, wenn ein vollständiger Code in der Form ist verfügbar,

+0

Danke @Sathishkumar Jayaraj! Das habe ich gesucht! –

+0

@ClaudioFernandoMaciel bitte Tick für die richtige Antwort angeben. –

1

ändern Sie die Form wie unten:

<%= form_for(@consolidated_document) do |f| %> 

<%= file_field_tag "photo[]", multiple: true %> 

<%= f.submit %> 

In Controller neu:

@consolidated_document = ConsolidatedDocument.new 
Verwandte Themen