Wie kann ich direkt einen Fehler, wenn Sie nichts zurückgibt in rails?
Ich versuche, ein system, wo Benutzer können nur Artikel zu sehen, die er oder Sie geschrieben hat.
In den Artikeln controller, lege ich unter Zeile
@article = current_user.articles.find(params[:id])
wo params[:id] ist ein 'article_id' per.
Ich möchte nur wissen, wie kann ich überspringen Sie die Fehler aus der Anzeige und nur redirect auf die :index-Aktion, wenn der Artikel nicht vorhanden ist, oder wenn der Benutzer nicht über die Berechtigungen, um es anzuzeigen.
Ich lege @Artikel.nil? bedingte Anweisung nach oben find-Anweisung, aber es scheint, dass die find-Anweisung oben erzeugt den Fehler sofort wie unten.
Konnte nicht finden, dass Artikel mit der ID=1662 [WO (articles
.user_id = 1)]
Wie kann ich dieses problem beheben?
- bezogen auf diese Frage
Du musst angemeldet sein, um einen Kommentar abzugeben.
ActiveRecord::Base.finden immer eine Ausnahme auslöst, wenn es nicht das suchen eines Datensatzes, das ist gewollt. Sie sollten nur verwendet werden
find
wenn Sie absolut erwarten, dass was auch immer es ist, die Sie suchen. Wenn Sie zerreißen, eine show-Aktion und kann nicht den Artikel finden, sollten Sie sich retten, die Ausnahme und machen einen 404 (Nicht gefunden) anstatt die Umleitung zu-index (technisch).Wenn Sie etwas finden wollen, indem es
id
Attribut, ohne dass eine Ausnahme, verwenden Sie die dynamische finderfind_by_id
wird false zurückgeben, wenn es nicht gefunden wird, wird ein Datensatz mit dieser id.Edit:
Dynamische Finder nun eine andere Signatur
find_by_id
sollte jetzt sein:find_by :id, id_to_find
Finden Sie in der neuen Rails Guide auf Abfragen
find_by
stattfind_by
nicht existieren, wenn diese Frage gestellt wurde. Ich habe noch ein link zur Anleitung und dynamische Finder Abschnitt obwohl.Sollten Sie verwenden
find_by_id
oder eine der Methoden, die in diesem Frage.Dies ist, da die ActiveRecord-find-Methode löst eine Ausnahme aus, wenn Sie nicht finden können eine bestimmte ID. Sie können dies lösen, ein paar Möglichkeiten, der beste Weg zu sein scheint
Die find () - Methode löst ein RecordNotFound-exception, während Methoden wie find_by_id zurück ein null-Wert. So haben Sie ein paar Optionen, die Sie können wickeln Sie Ihre Aufruf der Methode mit einem begin/rescue, fügen Sie ein rescue_from block auf Ihrem controller:
oder verwenden Sie eine find_by_id Methode und behandeln die Bedingung, dass null zurückgegeben wird.
Gibt es tatsächlich eine Reihe von anderen alternativen, aber die oben, sind ein guter Anfang, mit find_by_id, dass es wohl die einfachste.