Rails-Methode, die nur einen einzelnen Datensatz zurückgibt und eine Ausnahme auslöst, wenn mehrere zurückgegeben werden

8

In Django hat das ORM eine Funktion namens get() Wird verwendet, um nur eine einzige Instanz eines Modells zurückzugeben. Insbesondere löst es eine Ausnahme aus, wenn mehrere Objekte zurückgegeben werden, wenn Sie nur ein erwartet haben. Daher eignet es sich besonders für bestimmte Suchvorgänge (z. B. "Einen Artikel mit diesem Objekt suchen").

Ich konnte keine analoge Funktion in Rails / ActiveRecord finden, die das gleiche Verhalten hat. Bisher habe ich gerade einen Code geschrieben wie:

%Vor%

Aber das hat zu stillen Bugs geführt, bei denen mehrere Instanzen eines Objekts zurückgegeben wurden - was wirklich eine schlechte, mehrdeutige Situation ist - und wir packten einfach den ersten und machten weiter wie alles in Ordnung.

Im Active Record Query-Schnittstellenhandbuch sind fünf Möglichkeiten zum Abrufen eines einzelnen Objekts aufgeführt. wobei find() und find_by() am vielversprechendsten aussehen, aber keiner von ihnen eine Ausnahme auslöst, wenn mehrere Objekte den Suchkriterien entsprechen.

Ich weiß, dass ich einfach where() und find_by() Abfragen schreiben und die Anzahl der selbst zurückgegebenen Objekte überprüfen könnte, aber dieser Code erscheint überall in unserer Codebasis und ich möchte lieber nicht all das hinzufügen. Es scheint auch so ein generisches, gemeinsames Bedürfnis zu sein, dass ich erwarte, dass dies irgendwo in Rails / ActiveRecord verbacken wird.

Gibt es eine Funktion, die mir fehlt und die das Auffinden dieser Situationen erleichtert? Wir verwenden Rails 4 und Ruby 2.0, wenn es hilft.

    
Hartley Brody 05.11.2013, 17:25
quelle

1 Antwort

2

Ich kenne keine eingebaute Active Record-Methode, die das tut, was Sie fragen, aber es wäre nicht schwer, Ihre eigenen zu schreiben. Etwas wie:

%Vor%

Ich habe den obigen Code nicht getestet, also wird es sicherlich Fehler geben, aber Sie bekommen die Idee. Sie könnten sogar einen Schritt weiter gehen und eine ähnliche Methode zur aktiven Aufzeichnungsbasis hinzufügen, auf die alle Ihre Modelle Zugriff haben.

    
Josh 05.11.2013, 17:39
quelle

Tags und Links