Rails Remote-Lösch- und Update-Ansicht über Ajax
Wenn ich in der Vergangenheit einen Teil meiner Ansicht über Ajax aktualisieren wollte, habe ich Folgendes getan:
Erstellen Sie einen Teil aus dem Teil, den ich aktualisieren möchte, und geben Sie ihm beispielsweise eine eindeutige ID#tracks
Erstellen Sie eine spezielle Aktion in der Steuerung für diesen Ajax-Aufruf, sagen wirremove_track
das aktualisiert alle Werte usw. und fügt hinzuformat.js
Erstellen Sie eine neue JS-Datei mit demselben Namen wie die Aktion, damit Rails sie automatisch aufruftremove_track.js.erb
die enthält so etwas wie:$('#tracks').html("<%=j render 'cds/show_tracks' %>");
einstellenremote: true
in dem Link, der diese Aktion aufruft.All dies ist in Ordnung, aber jetzt versuche ich, eine gemeinsame zu löschen und zu aktualisierenindex
Ansicht mit dem regulärendestroy
Methode für Flexibilität, das heißt, ich kann diese Methode entweder über Ajax oder normal aufrufen. Ich dachte, es ist so üblich, dass es einen besseren Weg geben muss als alle oben genannten.
Ich kann die destroy-Methode bekommen, um my aufzurufendestroy.js.erb
Datei durch einfaches Einfügen in den Controller:
format.js { layout: false }
und natürlich einstellenremote: true
auf den Link.
Was ich nicht tun kann, ist die Ansicht zu aktualisieren. Die Tabelle, die ich aktualisieren möchte, ist in einem Div mit einer eindeutigen ID eingeschlossen. Da es sich jedoch nicht um einen Teil handelt, wird die Aktualisierung des Inhalts verweigert. Vielleicht fehlt mir etwas.
Bin ich dazu verdammt, einen Teil erstellen und ihn mit der oben beschriebenen Methode aktualisieren zu müssen, oder gibt es eine magischere Möglichkeit, dies zu tun (außer mit Turbolinks)?
Vielen Dank.
PS Außerdem habe ich gerade bemerkt, dass dies den zusätzlichen Nachteil hat, dass ich den Rest der Parameter nicht an die destroy-Methode übergeben kann, da nur die Objekt-ID übergeben wird, die mit den regulären CRUD-Routen zerstört werden soll. Wenn ich versuche zu benutzenplatform(action: destroy)
oderplatform(method: delete)
Ich erhalte einen Fehler:
No route matches {:action=>"destroy", :controller=>"platforms"}
Das heißt, ich muss eine neue Route erstellen, wenn ich diese Parameter übergeben möchte ...
Ein weiterer Nachteil besteht darin, dass ich die gesamte Logik für die Suche und Sortierung, die ich in der Indexmethode habe, erneut in der Destroy-Methode durchführe. Ich bin mir sicher, dass dies so istdefinitiv nicht der Weg, es zu tun.