2017-05-19 6 views
0

Ich habe ein Problem mit einem Bearbeitungsformular auf meiner Seite, um Attribute mit AJAX in Ruby on Rails 5 zu aktualisieren und zu speichern. Das Ziel besteht darin, das Bearbeitungsformular in dasselbe zu rendern Seite und dann nach der Bearbeitung der Informationen das Formular absenden und die Info-Show sichern lassen. Das Edit-Formular auf der Seite erscheinen zu lassen funktioniert einwandfrei, aber danach tut es einfach nichts.Senden einer Aktualisierungsanforderung in Rails 5-Formular mit AJAX bearbeiten

Ich habe das Gefühl, es hat etwas mit, wo das Formular sendet, aber ich kann nicht scheinen, es herauszufinden. Ich habe überall gesucht und es scheint, es gibt viele Antworten da draußen für Schienen 3/4, aber die Anfrage ist anders für Schienen 5. Von allen Beispielen, die ich finden kann, sieht mein Code richtig aus, aber klar, mir fehlt etwas. Ich bin immer noch ein Anfänger Rails-Entwickler, aber von meinem Verständnis der Edit-Formular sollte eine Update-Anfrage an den Controller senden, aber es scheint nicht so zu tun. Jede Hilfe wird geschätzt. Code unten.

-Controller

 def create 
     @properties = Property.new(property_params) 
     if @properties.save 
      flash[:success] = "Property created successfully!" 
      redirect_to properties_path 
     else 
      render 'new' 
     end 
     end 

     def edit 
     @properties = Property.find(params[:id]) 
     respond_to do |format| 
      format.html { @properties.save } 
      format.js 
     end 
     end 

     def update 
     @properties = Property.find(params[:id]) 
     @property.update_attributes(property_params) 
     respond_to do |format| 
      format.html { redirect_to property_path } 
      format.js 
     end 
     end 

Ansicht

<%= link_to fa_icon("edit", text: "Edit Property"), 
     edit_property_path(@properties), remote: true, class: "btn btn- 
     primary btn-large btn-ouline" %> 

edit.js.erb

$('div#show-edit').replaceWith('<%= j render("edit_prop_form") %>'); 

update.js.erb

$('#edit_property_<%= @properties.id %>').replaceWith('<%= j render("properties_display") %>'); 

_edit_prop_form.html.erb Teil

<%= bootstrap_form_for(@properties, layout: :horizontal, control_col: "col-sm-4", remote: true) do |f| %> 
     <%= render 'shared/error_messages', object: f.object %> 


     <%= f.text_field :company, class: 'form-control' %> 

     <%= f.text_field :address1, class: 'form-control' %> 

     <%= f.text_field :address2, class: 'form-control' %> 

     <%= f.text_field :city,  class: 'form-control' %> 

     <%= f.text_field :state, class: 'form-control' %> 

     <%= f.text_field :zipcode, class: 'form-control' %> 

     <%= f.form_group do %> 
     <%= f.submit "Edit", class: "btn btn-primary" %> 
     <% end %> 

    <% end %> 

HTML-Code, bearbeiten Form

<form role="form" class="form-horizontal" id="edit_property_99" 
    action="/properties/99" accept-charset="UTF-8" data-remote="true" 
    method="post"><input name="utf8" type="hidden" value="✓"><input 
    type="hidden" name="_method" value="patch"> 

TL macht; DR Formular bearbeiten Rendern auf der Seite von der ersten Bearbeitungsschaltfläche, aber "Bearbeiten" Button auf dem Formular aktualisiert und speichert keine bearbeiteten Informationen und zeigt das ursprüngliche div.

+2

In der Update-Methode, was ist @property? – mr12086

+2

Nun, es sollte die Instanz der Eigenschaft sein, die aufgerufen wird. Aber deine Frage lässt mich denken, dass es "@properties" stattdessen sein sollte ... –

+0

.... annddd das war das Problem die ganze Zeit. Zahlt sich aus, um einen zweiten Satz Augen zu haben und einen Schritt zurück zu nehmen, denke ich. Danke, dass du darauf hingewiesen hast! +1 für dich, mein Freund. –

Antwort

0

Wie mr12086 darauf hingewiesen, in meiner Update-Methode @property sollte @properties gewesen sein. Nach der Änderung funktionierte alles wie erwartet.