2011-01-07 15 views
1

Ich habe ein Formular in Rails 3.0.3, dass die neue Verwendungen: remote => true Merkmal:Rails 3 Remote Form Parameter Nicht Passing

<%= form_for :photo, :remote=>true, :html=>{:id=>"photo_form", :multipart => true},  :url=>{:action=>"photo"} do |p| %> 
<div id="photo_container"> 
    <div class="photo"> 
    <% if @card.photo.exists? %> 
    <%= image_tag @card.photo.url(:full), :id=>"card_photo" %> 
    <% end %> 
    </div> 
    <label class="cabinet"> 
     <%= p.file_field :photo, :class=>"file" %> 
    </label> 
</div> 
<% end %> 

Nach einreichen, das Fotofeld nicht an den Controller Aktion übergeben . Wenn ich jedoch das remote => true-Bit entferne, wird der Parameter einwandfrei übergeben.

Diese Frage, Rails Remote Form does not post form parameters, scheint das gleiche Problem zu finden, aber die Antwort stimmt hier nicht überein: meine HTML ist anscheinend gültig und wohlgeformt.

Hat jemand einen Rat hier? Ich bin ratlos.

+0

Stellen Sie sicher, dass Sie die Javascript-Lib enthalten – s84

Antwort

2

Soweit ich weiß, können Sie keine mehrteiligen Daten aus der Ferne senden. Dies liegt daran, dass das Browser-Sicherheitsmodell den Zugriff auf den Inhalt <file> nicht erlaubt, der benötigt würde, um es über einen XMLHttpRequest zu streamen, wie er von dem entfernten Mechanismus verwendet wird.

Ein Remote-Formular entspricht im Allgemeinen dem gleichen Formular ohne mehrteilige Unterstützung.

Wenn Sie einen asynchronen Dateiupload durchführen müssen, müssen Sie eine verwenden und das Formular an dieses Ziel senden, um zu verhindern, dass die Hauptseite aktualisiert wird. Es gibt Bibliotheken, die es der gerahmten Seite ermöglichen, den Master-Rahmen nach Fertigstellung bei Bedarf zu aktualisieren.

+0

Ich würde auch hinzufügen, dass es ein Limit für die Größe eines XMLHttpReq (AJAX) gibt. Ich glaube nicht, dass Sie nicht eine bedeutend große Datei über AJAX POSTIEREN können ... – sethvargo

+0

Ich hätte hinzufügen sollen, dass ich das tatsächlich in einer früheren Iteration dieser Seite funktionierte. Ich habe diese Funktionalität seither nicht berührt, aber ich weiß, dass es an einem Punkt funktioniert hat, also muss das möglich sein? –

+1

* Facepalm * Stellt sich heraus, dass ich das remoteipart-Plugin (https://github.com/formasfunction/remotipart) verwendet habe und ich habe es falsch konfiguriert. Also, Tadman, du hast absolut recht, aber es gibt einen besseren Weg als iFrames, um es zu umgehen! Danke allen. –