Ruby: Nils in einer IF-Anweisung [duplizieren]

8

Ich habe den folgenden sehr hässlichen Ruby-Code in einer Rails-App, an der ich gerade arbeite:

%Vor%

Ich möchte nur fragen, ob params [: search] [: tags_name_in] definiert wurde, aber weil params und params [: search] und params [: search] [: tags_name_in] alle null sein können , wenn ich benutze ...

%Vor%

... Ich bekomme einen Fehler, wenn es keine Parameter oder keine Suchparameter gibt.

Sicherlich muss es einen besseren Weg geben, dies zu tun ... Vorschläge?

    
Andrew 22.03.2011, 15:53
quelle

6 Antworten

10

Wenn Sie nur versuchen zu sehen, ob es definiert ist, warum es nicht einfach halten und die definierten verwenden? Funktion?

%Vor%     
Will Ayd 22.03.2011, 16:07
quelle
6

Params wird immer definiert sein, so dass Sie das entfernen können.

Um die Menge an Code zu reduzieren, können Sie

verwenden %Vor%

Wenn params[:search] nicht definiert ist, wird die Bedingung kurzgeschlossen und gibt nil zurück.

    
Mike Lewis 22.03.2011 15:56
quelle
4

Sie können dafür undand verwenden. Es behandelt genau diese Situation:

if params[:search].andand[:tags_name_in].andand.present?

    
ryeguy 22.03.2011 16:04
quelle
4

Sie haben viele Möglichkeiten, die den Wert von params[:search][:tags_name_in] oder nil zurückgeben, wenn params[:search] ist nil .

Klar aber lang:

%Vor%

Verwendung von try (von active_support ):

%Vor%

Verwenden von Rettung:

%Vor%

Verwenden von fetch :

%Vor%

Beachten Sie, dass fetch manchmal verwendet werden kann, um if insgesamt zu vermeiden, insbesondere wenn nichts zu tun ist, wenn der Parameter nicht angegeben ist:

%Vor%     
Marc-André Lafortune 22.03.2011 16:35
quelle
3

Haha, wenn du schrecklich sein willst und monkeyypatch nil:

%Vor%

Ich würde einen Kurzschluss empfehlen, wenn auch wie die anderen Antworten vorschlagen.

    
Nathan Ostgard 22.03.2011 16:05
quelle
0

Normalerweise mache ich so etwas:

%Vor%

Auch wenn es Ihnen nichts ausmacht, in Ihrer if-Anweisung auf nils zu testen, können Sie das auch tun:

%Vor%

Dies wird keinen Fehler verursachen, da die & amp; & amp; & amp; Betreiber.

    
Brett Bender 22.03.2011 15:58
quelle