/ / Senden eines Formulars mit Remote True in Rails 4 - Ruby-on-Rails, Ajax, Formulare, Ruby-on-Rails-4

Senden eines Formulars mit Remote True in Rails 4 - Ruby-on-Schienen, Ajax, Formulare, Ruby-on-Schienen-4

Ich habe ein Formular zum Aktualisieren eines Bildes mit

<%= form_for current_user, url: update_image_user_path(current_user), method: :post, html: {multipart: :true, remote: true},  :authenticity_token => true do |f| %>

die aktion hat

respond_to do |format|
format.js
format.html
end

aber ich erhalte den folgenden Fehler

ActionView::MissingTemplate - Missing template users/update_image, application/update_image with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :raw, :ruby, :coffee]}.

Ich habe keine Vorlage "update_image.html.erb", aber durch den Fehler erfahre ich, dass die Anfrage nicht im js-Format gesendet wird

Was vermisse ich?

Antworten:

6 für die Antwort № 1

Es gibt mehrere Dinge, die Sie wissen sollten.

  1. Ajax verwendet dazu eine sogenannte xmlhttprequestSenden Sie Ihre Daten. Leider können mit xmlhttprequests keine Dateien gepostet werden. Remotipart mag funktionieren, aber es gibt viel mehr Dokumentation sowie ein Rails Cast-Video auf jqueryfileupload. Es wird von vielen Sites verwendet (viele, die nicht einmal Schienen benutzen).

    EIN. https://github.com/tors/jquery-fileupload-rails
    B. http://railscasts.com/episodes/381-jquery-file-upload

  2. remote: true ist kein HTML-Attribut. Ändere deinen Code bis:

    <%= form_for current_user, url: update_image_user_path(current_user),
    method: :post, html: {multipart: :true}, remote: true,
    :authenticity_token => true do |f| %>
    

Der wichtigste Teil des Fehlers, auf den Sie stoßen, ist folgender:

:formats=>[:html]

Das sollte heißen:

:formats=>[:js]

Mit remote: true sollte der Fehler jetzt an der richtigen Stelle behoben sein.


5 für die Antwort № 2

Rails Remote True funktioniert nicht beim Hochladen von Bildern. Sie können kein Bild mit Ajax hochladen, wenn Sie nur remote true verwenden. Für den Benutzer ajaxForm benötigen Sie die Datei jquery.form.js. Hierzu gehören

    <script src="http://malsup.github.com/jquery.form.js"></script>

und Form binden

     $("#formid").ajaxForm()

Alternativ können Sie auch jqueryfileupload-rails gem verwenden

https://github.com/tors/jquery-fileupload-rails


2 für die Antwort № 3

Wie wäre es mit html: {multipart: :true}, remote: true Anstatt von html: {multipart: :true, remote: true}?