我有布尔哈希
({"u25" => true, "f26t49" => true, "o50" => true, ..});
总而言之,有19个布尔值,我想用我的数据库中的表检查这些并得到那些数据集,至少有一个匹配。我曾尝试过
“Model.all(:conditions => hash)”或“Model.where(hash)”
但我得到了查询
“.. u25 == true AND f26t49 == true AND o50 == true ...”
但我需要这样的事情:
“.. u25 == true OR f26t49 == true ...”
我希望你能帮助我!
此外:
我尝试制定解决方法并从哈希中生成查询字符串。如果我直接写这个字符串(m = Model.where(“u25 =='t'”))它可以工作但是如果我通过一个可变的
@query = '"u25 == ' + "'t'" + '"'
m = Model.where(@query)
比m是零!
答案 0 :(得分:1)
我认为您的解决方法可以帮助您找到正确的方向。这就是我要做的事情:
# model.rb
def self.search_with_conditions(hash)
query = hash.map{|k,v| "#{k} == #{v}"}.join(' OR ')
where(query)
end
然后在您的控制器中,只需致电:
m = Model.search_with_conditions(hash)
旁注:这可能适用于某些DB而不适用于其他数据库,因为有些使用1作为true的值。此外,我没有时间尝试这个,所以我可能会在这种情况下错过一些引号。我认为可能是'#{v}'
。
编辑:在学习了更多关于Rails之后,我必须在这里添加免责声明:
如果字符串k或v是某些用户输入的一部分,则此方法易受SQL注入的影响。小心使用此方法。