如何使用“OR-join”将哈希作为查询传递?

时间:2012-04-09 22:53:38

标签: ruby-on-rails hash conditional-statements

我有布尔哈希

({"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是零!

1 个答案:

答案 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注入的影响。小心使用此方法。