Ich bin über eine Situation gestolpert, wo meine Anwendung nach einer ID sucht, die nicht in der Datenbank existiert. Eine Ausnahme wird ausgelöst. Natürlich ist dies eine Standard-Situation für jeden Webentwickler.Allgemeine Rettung im gesamten Controller, wenn ID nicht gefunden wurde - RoR
Dank this answer Ich weiß, dass ziemlich ordentlich Rettung beschäftigt sich mit der Situation mit, etwa so:
def show
@customer = Customer.find(params[:id])
rescue ActiveRecord::RecordNotFound #customer with that id cannot be found
redirect_to action: :index #redirect to index page takes place instead of crashing
end
Falls der Kunde nicht gefunden werden kann, kann der Benutzer auf der Index-Seite umgeleitet wird. Das funktioniert absolut gut.
Jetzt ist das alles nett, aber ich muss die gleichen Rettungsversuche in Aktionen wie zeigen, bearbeiten, zerstören, usw., d. H. jede Controller-Methode, die eine bestimmte ID benötigt.
Having said that, hier meine Frage ist: Gibt es keine Möglichkeit, im Allgemeinen, dass mein Controller zu sagen, wenn es nicht die ID in einen seiner Methoden finden, um es in der Index-Seite umleiten soll (oder im Allgemeinen, führen Sie eine bestimmte Aufgabe aus)? eine eingebaute in rescue_from
Klassenmethode
Super, das macht den Trick, danke! Aus Neugier: Warum sollte diese Methode privat sein? – weltschmerz
Nur für Sauberkeit: die Methode muss nicht für andere Controller sichtbar sein, deshalb wird sie als privat deklariert. Es würde gleichermaßen funktionieren, wenn die Methode nicht als privat deklariert wird. – Baldrick
Sie könnten auch eine Flash-Nachricht hinzufügen flash [: notice] = "No record found" –