2016-05-01 51 views
0

我想通過姓氏和孃家姓名搜索名稱的數據庫。但是,如果婚前姓名爲零,則搜索會崩潰。我用if/then語句創建了一個工作,但想要學習如何在ruby中執行此操作的正確(更清晰)的方法。Ruby on Rails 4 - 哪裏聲明崩潰當無

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 

謝謝!

+0

當搜索崩潰時,您收到了什麼錯誤? –

+0

Neven說,因爲nil maiden_name應該沒問題。 –

+0

你是對的,錯誤實際上是在.upcase上,當沒有一個孃家姓時,它正在崩潰。有沒有辦法在sql語句中爲非空名稱添加upcase? – user3461645

回答

0

您可以通過添加#compact應用於args數組避免where的條件子句nil值,如下所示:

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

但它是你希望是真的嗎?

+0

謝謝!這是一個非常好的提示,它確實也適用於這種情況。 – user3461645

+0

有沒有什麼辦法可以做到這一點,如果我使用這種方法:Alumni.where(「lastname =?」,[user.last_name,user.maiden_name]) – user3461645

+0

@ user3461645'Alumni.where(「lastname IN?」,. ..)'但爲什麼你需要使用舊式的參數到哪裏? –