2012-02-03 35 views
0

我正在製作rails應用程序,以便用戶可以搜索midi記錄數據庫並查找與我給出的屬性相對應的midi文件。 例如,用戶可能會將名稱=「blah」composer =「buh」和難度=「瘋狂」的midi文件的數據輸入到html表單中。 這一切都很好,除了我希望當用戶沒有輸入字段的數據時,在數據庫上執行select語句時忽略該字段。 現在這是我的選擇語句是什麼樣子:配置rails數據庫查詢,以便忽略空白字符串參數

@midis=Midi.where(:name => params[:midi][:name], 
        :style => params[:midi][:style], 
        :numparts => params[:midi][:numparts], 
        :composer=> params[:midi][:composer], 
        :difficulty => params[:midi[:difficulty]) 

可正常工作,但如果例如他/她離開:composer空白,作曲家場不應該在所有的考慮。這可能是一個簡單的語法,但我無法找到任何頁面。

非常感謝!

回答

3

不知道阿雷爾直接支持,但你總是可以這樣做:

conditions = { 
    :name => params[:midi][:name], 
    :style => params[:midi][:style], 
    :numparts => params[:midi][:numparts], 
    :composer=> params[:midi][:composer], 
    :difficulty => params[:midi[:difficulty] 
} 

@midis=Midi.where(conditions.select{|k,v| v.present?}) 
+0

謝謝!這解決了我的問題!我應該首先查看哈希文檔。 – BBB 2012-02-03 07:01:52

1

試試這個:

# Select the key/value pairs which are actually set and then convert the array back to Hash 
c = Hash[{ 
    :name  => params[:midi][:name], 
    :style  => params[:midi][:style], 
    :numparts => params[:midi][:numparts], 
    :composer => params[:midi][:composer], 
    :difficulty => params[:midi][:difficulty] 
    }.select{|k, v| v.present?}] 

Midi.where(c) 
+0

謝謝!這也適用 – BBB 2012-02-03 07:02:21