2013-07-18 8 views
8

In der Vergangenheit, wenn ich einen Teil meiner Ansicht durch Ajax aktualisieren wollte, habe ich folgendes getan:Rails remote löschen und aktualisieren Ansicht durch Ajax

  1. eine Teil schaffen aus dem Teil ich will zu aktualisieren und eine eindeutige ID zu geben, sagt #tracks
  2. für den Ajax-Aufruf, sagt eine besondere Aktion in der Steuerung erstellen remove_track, dass alle Werte aktualisiert, usw. und fügen format.js
  3. eine neue JS-Datei mit dem gleichen erstellen Name als die Aktion, so ruft Rails es automatisch remove_track.js.erb, die einige enthält sache wie: $('#tracks').html("<%=j render 'cds/show_tracks' %>");
  4. set remote: true in der Verknüpfung, die diese Aktion aufruft.

Das alles ist in Ordnung, aber jetzt versuche ich, eine gemeinsame index Ansicht mit der regulären destroy Methode für Flexibilität zu löschen und zu aktualisieren, was bedeuten, ich diese Methode entweder durch Ajax anrufen oder normal. Ich dachte mir, dass es so üblich ist, dass es einen besseren Weg gibt als alles oben genannte.

Ich kann das Verfahren erhalten zerstören, indem man einfach diese in die Steuerung meiner destroy.js.erb Datei aufzurufen:

format.js { layout: false } 

und natürlich remote: true auf den Link setzen.

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 eine partielle Tabelle handelt, verweigert sie die Aktualisierung des Inhalts. Vielleicht vermisse ich etwas.

Muss ich eine partielle erstellen und sie mit der obigen Methode aktualisieren oder gibt es eine magischere Art, es zu tun (außer Turbolinks)?

Danke.

PS Auch ich habe gerade bemerkt, dies den zusätzlichen Nachteil, dass ich nicht den Rest der params zur zerstören Methode übergeben kann, da sie nur die Objekt-ID übergeben Routen mit den normalen CRUD zu zerstören. Wenn ich versuche, platform(action: destroy) oder platform(method: delete) zu verwenden, bekomme ich einen Fehler:

No route matches {:action=>"destroy", :controller=>"platforms"} 

Was bedeutet, ich habe eine neue Route erstellen, wenn ich diese Parameter übergeben wollen ...

Noch ein weiterer Nachteil all dies ist dass ich die gesamte Logik für Suchvorgänge und Sortiervorgänge, die ich in der Indexmethode habe, erneut in der Destroy-Methode wiederhole. Ich bin sicher, das ist definitiv nicht der Weg, es zu tun.

Antwort