活动记录 从包装在数组中的哈希值中查找记录



我正在使用Rails,我想进行查询。我想我只是脑子放屁,但也许不是。我有一个数据进入我的控制器,如下所示。

units = [
  {:name=>"barbarian", :level=>5, :count=>10},
  {:name=>"archer", :level=>6, :count=>10}
]

我有一个模型,其中包含与namelevel数据相对应的数据。我想创建一个如下所示的查询...

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)

最新更新