2016-05-01 5 views
0

Ich versuche, eine Datenbank der Namen nach Nachnamen und Mädchennamen zu suchen. Wenn der Mädchenname jedoch null ist, stürzt die Suche ab. Ich habe ein Workaround mit einer if/then-Anweisung erstellt, möchte aber die richtige (sauberere) Art und Weise lernen, dies in Ruby zu tun.Ruby on Rails 4 - Where Anweisung stürzt ab, wenn keine

if user.maiden_name.nil?   
    x = Alumni.where(firstname: user.first_name, lastname: user.last_name) 
    else 
    x = Alumni.where(firstname: user.first_name, lastname: [user.last_name, user.maiden_name]) 
    end 

Vielen Dank!

+0

Welchen Fehler erhalten Sie, wenn die Suche abstürzt? –

+0

Was Neven sagte, weil nil maid_name sollte in Ordnung sein. –

+0

Sie haben Recht, der Fehler war tatsächlich auf der .Upcase, die abstürzte, als es einen Null-Mädchennamen gab. Gibt es eine Möglichkeit, auf der SQL-Anweisung für die Nicht-Null-Namen upcase hinzuzufügen? – user3461645

Antwort

0

können Sie nil Wert in where ‚s Bedingungsklausel vermeiden #compact zu args Array angewendet durch Zugabe, wie folgt:

Alumni.where(firstname: user.first_name, 
    lastname: [user.last_name, user.maiden_name].compact) 

Aber ist es, dass Sie wirklich wollen?

+0

Vielen Dank! Das ist ein wirklich guter Tipp, und es funktioniert auch für dieses Szenario. – user3461645

+0

Gibt es eine Möglichkeit, dies zu tun, wenn ich diese Methode verwenden würde: Alumni.where ("Nachname =?", [Benutzer.Vorname_Name, Benutzer.Maiden_Name]) – user3461645

+0

@ user3461645 'Alumni.where (" Nachname IN? ". ..) 'aber warum musst du die alten args verwenden wo? –