Ruby arbeitet sehr stark mit Exceptions, was die Fehlerbehandlung relativ einfach macht. Auch das Rails Framework arbeitet mit Exceptions. So wirft zum Beispiel der Code
den Fehler ActiveRecord::RecordNotFound. Doch nachdem ich bei Rails sowieso so wenig Code schreiben muss, finde ich es irgendwie nicht sehr elegant für die Fehlerbehandlung noch viel zu schreiben. So sah mein erster Anlauf aus:Project.find(@params["id"])
begin
@project = Project.find(@params["id"])
@page_title = "Project: " + @project.title
rescue ActiveRecord::RecordNotFound
@page_title = "Project not found"
render "layouts/error", 404
end
Und das ganze für jede Methode in dem Controller. Ich bin dann über Blöcke in Ruby gestolpert. Siehe den Link für eine Erklärung, was das ist.
Damit habe ich im ApplicationController die Methode handle404 implementiert:
def handle404(pagetitle)
begin
yield
rescue ActiveRecord::RecordNotFound
@page_title = pagetitle
render "layouts/error", 404
end
end
So sieht der Code von vorher nun wie folgt aus:
handle404("Project not found") {
@project = Project.find(@params["id"])
@page_title = "Project: " + @project.title
}
Das bewirkt, dass im RecordNotFound-Fall ein 404 Fehler mit dem Titel "Project not found" generiert wird.
So finde ich das schon recht elegant gelöst. Da ich aber erst seit sehr kurzer Zeit mit Ruby arbeite, weiss ich aber noch nicht, ob das so wirklich okay ist.