2016-02-13 42 views
0

我正在使用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个物品。这可能吗?如果不是,还有什么其他选择?

回答

0

我可能会做这样的事情

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) 
0

我们可以尝试去通过哈希输入进行查询的查询是这样的:

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)