我正在使用Rails,我想进行查询。我想我只是脑子放屁,但也许不是。我有一个数据进入我的控制器,如下所示。
units = [
{:name=>"barbarian", :level=>5, :count=>10},
{:name=>"archer", :level=>6, :count=>10}
]
我有一个模型,其中包含与name
和level
数据相对应的数据。我想创建一个如下所示的查询...
Unit.where('name = ? AND level = ? OR name = ? AND level = ?', "barbarian", 5, "archer", 6)
这将从Unit
模型中产生两条记录。但我只是想更聪明一点,因为我在units
数组中有大约 30 个项目。这可能吗?如果没有,还有哪些其他选择?
我可能会做这样的事情
clause = units.map { 'name = ? AND level = ?' }.join(' OR ')
values = units.map {|unit| [unit[:name], unit[:level]] }
conditions = [clause, values].flatten
# => ["name = ? AND level = ? OR name = ? AND level = ?", "barbarian", 5, "archer", 6]
现在你可以像这样使用查询
Unit.where(conditions)
我们可以尝试通过哈希输入进行查询,如下所示:
conditions = units.map do |unit_params|
condition = unit_params.map do |k, v|
"#{k} = '#{v}'" if k != :count
end.compact.join(' AND ')
"(#{condition})"
end.join(' OR ')
# conditions = "(name = 'barbarian' AND level = '5') OR (name = 'archer' AND level = '6')"
Unit.where(conditions)