[英]Activerecord query with group on multiple columns returning a hash with array as a key
我編寫了一個ActiveRecord
查詢,用於在按兩列col_a
和col_b
分組后獲取一些數據的計數
result = Sample.where(through: ['col_a', 'col_b'], status: [1, 5]).where("created_at > ?", 1.month.ago).group(:status, :through).count
返回:
{[1, "col_a"]=>7, [1, "col_b"]=>7, [5, "col_a"]=>4, [5, "col_b"]=>1}
現在我的問題是,如何訪問此哈希中的值?
做類似results[1, "col_a"]
會拋出錯誤(錯誤的參數號)。 我知道我可以通過編寫一個循環並逐個提取值來實現這一點。
但是我想知道是否有一種更慣用的方式來訪問這些值,類似於results[1]
,也許?
results[[1, "col_a"]]
# => 7
四種可能的方式(我確定還有其他方式):
# fetch one value at a time
results[[1, "col_a"]]
# => 7
# fetch all the values
results.values
# => [7, 7, 4, 1]
# loop through keys and values
results.each do |key, value|
puts key
puts value
end
# => [1, "col_a"], 7....
# convert results into a more usable hash
results.map! { |k,v| { k.join("_") => v } }.reduce({}, :merge)
results['1_col_a']
# => 7
另一個較重的選項,特別是如果這是一個經常進行的查詢,就是將結果包裝到一個新的Ruby對象中。 然后,您可以以更慣用的方式解析和使用結果,並定義比[1,'col_a']
更簡單的訪問器。
class SampleGroupResult
attr_reader key, value
def initialize(key, value)
@key = key
@value = value
end
end
results.map { |k,v| SampleGroupResult.new(k,v) }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.