2012-02-03 51 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

相关问题