2016-02-13 93 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)