Ich frage mich, ob Leute ihre Best Practices/Strategien zum Umgang mit Ausnahmen & Fehler teilen würden. Jetzt frage ich nicht, wann ich eine Ausnahme werfen soll (es wurde gründlich hier geantwortet: SO: When to throw an Exception). Und ich verwende das nicht für meinen Anwendungsfluss - aber es gibt legitime Ausnahmen, die die ganze Zeit passieren. Zum Beispiel wäre ActiveRecord :: RecordNotFound am beliebtesten. Was wäre der beste Weg, damit umzugehen? Der trockene Weg?Was ist die beste Strategie, um Ausnahmen und Fehler in Rails zu behandeln?
Im Moment mache ich eine Menge Kontrollen innerhalb meines Controllers, also wenn Post.find(5)
Nil zurückgibt - ich überprüfe das und werfe eine Flash-Nachricht. Obwohl dies sehr granular ist - es ist ein bisschen umständlich in einem Sinne, dass ich in jedem Controller nach Ausnahmen wie diesem suchen muss, während die meisten im Wesentlichen die gleichen sind und mit nicht gefundenen oder nicht gefundenen Datensätzen zu tun haben - so entweder als Post.find(5)
nicht gefunden oder wenn Sie versuchen, Kommentare vorhanden sind, die nicht zu schreiben im Zusammenhang anzuzeigen, die eine Ausnahme (so etwas wie Post.find(5).comments[0].created_at
)
werfen würde weiß ich Sie so etwas wie dies in Application tun können, und überschreiben sie später in einem bestimmten Controller/Methode, um granularere Unterstützung zu bekommen, aber wäre das ein geeigneter Weg, dies zu tun?
class ApplicationController < ActionController::Base
rescue_from ActiveRecord::RecordInvalid do |exception|
render :action => (exception.record.new_record? ? :new : :edit)
end
end
Auch würde dies im Fall arbeitet Post.find(5)
nicht gefunden, aber was ist Post.find(5).comments[0].created_at
- ich meine ich nicht eine vollständige geblasene Ausnahme auslösen kann, wenn der Beitrag existiert, aber hat nicht Kommentare, nicht wahr?
Um zusammenzufassen, habe ich eine Menge manuelle Überprüfung mit if/else/außer oder case/wann (und ich gestehe gelegentlich beginnen/rette) und Prüfung auf Null? oder leer? usw., aber es muss einen besseren Weg geben.
ANTWORTEN:
@Milan: Hallo Milan Vielen Dank für eine Antwort - ich stimme mit dem, was Sie gesagt haben, und ich denke, ich das Wort Ausnahme mißbraucht. Was ich meinte ist, dass gerade jetzt mache ich eine Menge Dinge wie:
if Post.exists?(params[:post_id])
@p = Post.find(params[:post_id])
else
flash[:error] = " Can't find Blog Post"
end
Und ich habe eine Menge dieser Art von „Exception Handling“, versuche ich mit zu vermeiden beginnen/Rettung. Aber es scheint mir, dass dies ein allgemein genug Ergebnis/Verifikation/Situation ist, dass es einen DRYer Weg geben sollte, das zu tun, nicht wahr? Wie würden Sie diese Art von Überprüfung durchführen?
Auch wie würde es in diesem Fall damit umgehen? Angenommen, Sie Kommentar erstellt Datum in der Ansicht angezeigt werden sollen:
Last comment for this post at : <%= @post.comments[0].created_at %>
Und dieser Beitrag keine Kommentare hat. Sie können
Last comment for this post at : <%= @post.comments.last.created_at unless @post.comments.empty? %>
tun Sie könnten einen Scheck in Controller tun. Etc. Es gibt mehrere Möglichkeiten, dies zu tun. Aber was ist der "beste" Weg, damit umzugehen?
Bitte - siehe meine Antwort oben in der Antwort - ich nicht richtig eingerückten Code in den Kommentaren :-) – konung
Hey Nick veröffentlichen kann, sorry für so Ranty klingen. Ich hatte einfach nicht genug Zeit, um meiner Antwort einen konstruktiven Teil hinzuzufügen. Jetzt ist es da. Hoffe, die ganze Antwort ist jetzt hilfreicher. –
Kein Problem - keine Beleidigung genommen, meine Frage war auch nicht ganz klar - bis ich es aufgeräumt habe. Du hast mir ein paar gute Tipps gegeben - ich warte nur ein bisschen, vielleicht hat jemand noch ein paar Vorschläge und dann werde ich das als beantwortet markieren. Danke für eine ausführliche Antwort. :-) – konung