0

我有一个带有布尔值的哈希

({"u25" => true, "f26t49" => true, "o50" => true, ..}); 

总而言之,有 19 个布尔值,我想用我的数据库中的一个表检查这些并获取这些数据集,至少有一个匹配项。我试过了

“Model.all(:conditions => hash)”或“Model.where(hash)”

但我得到了查询

“..u25 == true AND f26t49 == true AND o50 == true...”

但我需要这样的东西:

“..u25 == 真或 f26t49 == 真...”

我希望你能帮助我!

添加:

我试图做一个解决方法并从哈希中生成一个查询字符串。如果我直接写这个字符串 (m = Model.where("u25 == 't'")) 它可以工作,但如果我通过一个变量

@query = '"u25 == ' + "'t'" + '"'

m = Model.where(@query)

比 m 为零!

4

1 回答 1

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)

旁注:这可能适用于某些数据库而不适用于其他数据库,因为有些数据库使用 1 作为 true 的值。另外,我没有时间尝试这个,所以在这种情况下我可能会遗漏一些引号。我认为它可能是'#{v}'

编辑:在了解了更多关于 Rails 的信息后,我必须在此处添加免责声明:

如果字符串 k 或 v 是某些用户输入的一部分,则此方法容易受到 SQL 注入的影响。小心使用此方法。

于 2012-04-09T23:53:17.797 回答