Zerstören Pfad funktioniert nicht in Ruby on Rails
Völlig ratlos, da ich glaube, dass es mit der richtigen erholsamen setup, aber ich kann nicht scheinen, um zu löschen meine Liste.
Habe ich Folgendes:
Controller:
def destroy
@list = List.find(params[:id])
@list.destroy
redirect_to lists_path
end
#37 def show
#38 @list = List.find(params[:id])
#39 end
Index.html-Code.haml
- @list.each do |list|
...
= link_to "Delete", list_path(list), method: :delete, data: { confirm: 'Are you certain you want to delete this?' }
...
Routen:
ListApp::Application.routes.draw do
devise_for :users
resources :lists
Gibt die richtige rake routes-Ausgabe von:
lists GET /lists(.:format) lists#index
POST /lists(.:format) lists#create
new_list GET /lists/new(.:format) lists#new
edit_list GET /lists/:id/edit(.:format) lists#edit
list GET /lists/:id(.:format) lists#show
PATCH /lists/:id(.:format) lists#update
PUT /lists/:id(.:format) lists#update
DELETE /lists/:id(.:format) lists#destroy
Aber ich bin noch immer die folgende Fehlermeldung bei der Ausführung in der Produktionsumgebung.
I, [2013-09-10T15:27:40.338022 #453] INFO -- : Started GET "/lists/2" for 81.159.35.212 at 2013-09-10 15:27:40 +0000
I, [2013-09-10T15:27:40.340626 #453] INFO -- : Processing by ListsController#show as HTML
I, [2013-09-10T15:27:40.340867 #453] INFO -- : Parameters: {"id"=>"2"}
I, [2013-09-10T15:27:40.354092 #453] INFO -- : Completed 500 Internal Server Error in 13ms
F, [2013-09-10T15:27:40.359807 #453] FATAL -- :
NameError (undefined local variable or method `list' for #<ListsController:0x000000050a7c38>):
app/controllers/lists_controller.rb:38:in `show'
Wenn jemand weiß, was kann das jede Hilfe wäre sehr geschätzt 🙂
der Fehler ist in der
Hey Dax, vielen Dank für die Antwort. Eigentlich habe ich nicht wirklich eine show-Seite für irgendwelche Listen, die nur index. Es ist von der index-Seite, dass das delete-Methode soll aufgerufen werden. Irgendwelche anderen Ideen? 🙂
Könnten Sie uns zeigen-code mit der Zeile #38 auf der ListsController dh die Zeile, auf der der Fehler Auftritt?
Ich habe Hinzugefügt, Zeile 38, der controller oben. Es erroring versuchen, laden Sie die Seite anzeigen, wenn es wirklich sein sollte der Aufruf von delete.
show
Aktion gemäß der error-text - app/ - Controller/lists_controller.rb:38:im "show" - können Sie zeigen, dass der code?Hey Dax, vielen Dank für die Antwort. Eigentlich habe ich nicht wirklich eine show-Seite für irgendwelche Listen, die nur index. Es ist von der index-Seite, dass das delete-Methode soll aufgerufen werden. Irgendwelche anderen Ideen? 🙂
Könnten Sie uns zeigen-code mit der Zeile #38 auf der ListsController dh die Zeile, auf der der Fehler Auftritt?
Ich habe Hinzugefügt, Zeile 38, der controller oben. Es erroring versuchen, laden Sie die Seite anzeigen, wenn es wirklich sein sollte der Aufruf von delete.
InformationsquelleAutor Tom Pinchen | 2013-09-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aktualisiert Antwort.
Ihre
link_to
Erklärung sieht gut aus:Es wahrscheinlich, dass Sie haben nicht die erforderlichen javascript-Code in Ihre layout-Datei:
weshalb die
list_path
ist nicht in der Lage zu führen Sie diedestroy
Aktion und versucht, führen Sie dieshow
Aktion.Wenn dies nicht funktioniert, dann ist das problem anderswo zu verhindern, dass javascript ausgeführt wird.
list_path
nichtlists_path
Hi Vinodadhikary, vielen Dank für Ihre Antwort. Listen Pfad ist nur das laden der URL
http://third-box-27032.euw1.actionbox.io:3000/lists.2
aber nicht den Aufruf der delete-Methode oder die Daten bestätigen. List_path war in Ordnung, die in Entwicklung, es ist nur in der Produktion, wo es fehlschlägt? Irgendwelche anderen Ideen?können Sie versuchen:
= link_to "Delete", list_path(list), method: :delete, remote: true, data: { confirm: 'Are you certain you want to delete this?' }
Leider funktioniert das nicht, entweder, ich erhalte eine Fehlermeldung
ActionView::MissingTemplate (Missing template lists/show, application/show
das lässt mich vermuten, es geht nicht, dass man die delete-Methode überhaupt 🙁Bitte haben Sie einen Blick auf meine aktualisierte Antwort.
InformationsquelleAutor vee
Blick auf Ihre log-Ausgabe, der link ist das senden einer GET-Anforderung statt einer Anfrage LÖSCHEN. In rails, einen link mit
method: :delete
verändert wird, von einer GET-Anfrage, um eine DELETE-Anfrage via JavaScript.Meine Vermutung ist, dass Sie nicht einschließlich der Schienen Standard-jquery-javascript-Dateien entweder in Ihrem application.js oder über
= javascript_include_tag :defaults
, der Sie in jquery und jquery.ujs für Schienen.Können Sie sicherstellen, dass jquery und jquery.ujs geladen werden auf deiner Seite mit dem link löschen?
Abwechselnd, versuchen Sie
= javascript_include_tag :defaults
zu Ihrer Ansicht/layout und sehen, ob der link anfängt zu arbeiten.Außerdem schlage ich vor, dass Sie beobachten und Folgen Sie diese Railscasts auf Unaufdringliche Javascript für weitere Informationen.
Verwenden Sie einen web-inspector in Ihrem browser? Sehen Sie irgendwelche JS Fehler, wenn Sie auf den link klicken? Versuchen Sie es, indem Sie auf der Konsole in die Geschichte der web inspector, damit kannst du alle Fehler sehen nach einem Klick durch den link: developers.google.com/chrome-developer-tools/docs/...
Hier ist ein test für Sie: springen Sie in Ihre JS-Konsole auf die Produktions-Seite mit dem link löschen. Geben Sie diesen Befehl
$.rails == undefined
. Wenn die Konsole spuckt zurücktrue
, dann müssen Sie nicht die Schienen/jquery_ujs geladen in Ihr Vermögen.$.rails
ist die jquery_ujs handler für Schienen-Anfragen. Also, wenn die Produktion nicht jquery_ujs, Sie haben eine assets pipeline-problem. Könnte Sie posten Sie Ihre volle %Kopf-und application.js?InformationsquelleAutor Carlos Drew
Versuchen, die Verknüpfung zu lists_path statt list_path. Schauen Sie auf Ihre Routen.
InformationsquelleAutor NM Pennypacker
In dem controller ändern Sie die @ - Liste.zerstören in der "destroy-Methode' , @Liste.löschen . Bei mir hat es geklappt in der Vergangenheit. Hoffe, es hilft.
InformationsquelleAutor Rails Bluebelt