Mögliches Duplikat:
Model.find(1) gibt ActiveRecord-Fehler, wenn id 1 nicht existiert
Wenn es in der Datenbank keinen Benutzer mit der ID 1 gibt, versucht User.find(1)
löst eine Ausnahme aus.
Warum ist das so?
Mögliches Duplikat:
Model.find(1) gibt ActiveRecord-Fehler, wenn id 1 nicht existiert
Wenn es in der Datenbank keinen Benutzer mit der ID 1 gibt, versucht User.find(1)
löst eine Ausnahme aus.
Warum ist das so?
Denn das ist die Art und Weise, wie die Architekten die Funktion von find(id) beabsichtigt haben, wie in der RDoc angegeben:
Nach ID suchen - Dies kann entweder eine bestimmte ID (1), eine Liste von IDs (1, 5, 6) oder ein Feld von IDs ([5, 6, 10]) sein. Wenn für alle aufgelisteten IDs kein Datensatz gefunden werden kann, wird RecordNotFound ausgelöst.
Wenn Sie nicht wollen, dass die Ausnahme ausgelöst wird, verwenden Sie find_by_id, das nil zurückgibt, wenn es kein Objekt mit der angegebenen ID findet. Ihr Beispiel würde dann lauten User.find_by_id(1)
.
Nach der Erklärung von runako ist es tatsächlich ziemlich nützlich, die Wahl zu haben, ob eine Ausnahme ausgelöst wird oder nicht. Ich arbeite an einer Blog-Anwendung und wollte Unterstützung für die Anzeige des nächsten oder vorherigen Blogeintrags hinzufügen. Ich konnte zwei Instanzmethoden zu meiner Post
Modell, das einfach zurückgibt nil
wenn Sie versuchen, den vorherigen Beitrag zu sehen, wenn Sie den ersten Beitrag sehen, oder den nächsten Beitrag, wenn Sie den letzten Beitrag sehen:
def next
Post.find_by_id(id + 1)
end
def previous
Post.find_by_id(id - 1)
end
Dadurch wird vermieden, dass mein Hilfscode, der die Links Vorheriger Beitrag/Nächster Beitrag bedingt generiert, mit der RecordNotFound
Ausnahme, was schlecht wäre, weil es eine Ausnahme für den Kontrollfluss verwenden würde.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.