2016-05-01 11 views
0

私は姓と姓の両方で名前のデータベースを検索しようとしています。ただし、メイデン名がnilの場合、検索はクラッシュします。私はif/thenステートメントで回避策を作成しましたが、これをルビーで行うための適切な(よりクリーンな)方法を学びたいと思っています。Ruby on Rails 4 - nilでWhere文がクラッシュする

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 

ありがとうございます!あなたが本当に望むことを

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

をしかし、それを次のとおりです。次のように

+0

検索時にエラーが発生しましたか? –

+0

Neilが言ったことは、nil maiden_nameはうまくいくはずだからです。 –

+0

あなたは正しいです、エラーは実際に.upcaseにありました。これは無名の旧姓があったときにクラッシュしていました。 null以外の名前のsql文にupcaseを追加する方法はありますか? – user3461645

答えて

0

あなたは、args配列に適用される#compactを追加することにより、whereの条件節でnil値を避けることができますか?

+0

ありがとうございました!これは本当に良いヒントですが、このシナリオでも実際に機能します。 – user3461645

+0

このメソッドを使用していた場合、これを行う方法はありますか?Alumni.where( "lastname =?"、[user.last_name、user.maiden_name]) – user3461645

+0

@ user3461645 'Alumni.where(" lastname IN? ",. ..) 'しかし、なぜ古いスタイルの引数をどこに使う必要がありますか? –

関連する問題