Wie man einen 'find' oder 'where' ausgibt, der einen RecordNotFound auslöst

8

Wenn ich einen Fund mit einer ID aufruft, wird er zum gezielten Fund und wirft einen Fehler RecordNotFound.

%Vor%

Aber wenn ich das mit Bedingungen anrufe, bekomme ich null wenn nicht gefunden:

%Vor%

Ich möchte, dass eine solche bedingte Suche auch einen Fehler auslöst. Ich weiß, dass ich es kann:

%Vor%

Aber das hat nur wirklich einfache Bedingungen. Meins braucht ein wenig mehr Komplexität; eigentlich so etwas wie:

%Vor%

Und wenn nichts gefunden wird, möchte ich, dass es den RecordNotFound-Fehler auslöst. Ist das überhaupt möglich? Oder sollte ich einfach etwas Code hinzufügen, um gegen Null zu prüfen? und wenn nicht? den Fehler selbst aufbringen? Und wenn ja, wie mache ich das in Rails 3?

    
berkes 08.03.2012, 11:28
quelle

2 Antworten

3

Ihr letzter Absatz ist was Sie tun müssen. Entweder gegen Null prüfen oder die Ausnahmen selbst auslösen. Um die Ausnahme selbst auszulösen, gehen Sie folgendermaßen vor:

%Vor%     
Douglas F Shearer 08.03.2012, 12:28
quelle
41

Im letzten Codeschnipsel werden tatsächlich alle Datensätze aus der Datenbank abgerufen und dann select für ein Ruby-Array ausgeführt. Es hat nichts mit ActiveRecord zu tun, also kannst du machen, was du magst, um eine Exception manuell auszulösen, benutze entweder den von Douglas vorgeschlagenen Code oder if , oder unless etc. Aber es scheint, dass du es nicht ganz kannst Verstehen Sie, was Ihr Code macht. Ihre select {...} wird nicht in SQL SELECT ... WHERE(...) übersetzt.

Wenn Sie eine Ausnahme benötigen, die von ActiveRecord query automatisch ausgelöst wird, verwenden Sie Folgendes:

%Vor%

Die äquivalenten bang-Methoden existieren auch für find_by-Methoden, zum Beispiel Foo::Bar.find_by_name!(name)

    
RocketR 20.03.2012 13:03
quelle

Tags und Links