Railsアプリに次のクエリがありますが、その結果には属性名がないため、amchartsで使用できません
EmployeeDepartment.joins(:states).group
("employee_departments.name").count
結果は次のとおりです。{"Academic Support":1}
このようにする方法{"department_name":"Academic Support","department_count":1}
Railsアプリに次のクエリがありますが、その結果には属性名がないため、amchartsで使用できません
EmployeeDepartment.joins(:states).group
("employee_departments.name").count
結果は次のとおりです。{"Academic Support":1}
このようにする方法{"department_name":"Academic Support","department_count":1}
次のようなハッシュがあるとします。
hash = { "Academic Support" => 1, "Another Department" => 3, "Something Else" => 4 }
map
必要なものを含むハッシュの配列に変換するために使用できます。
hash.map { |k, v| { "department_name" => k, "department_count" => v } }
=> [{"department_name"=>"Academic Support", "department_count"=>1},
{"department_name"=>"Another Department", "department_count"=>3},
{"department_name"=>"Something Else", "department_count"=>4}]
ハッシュにキーと値のペアが 1 つしか含まれておらず、別のハッシュが必要な場合は、次のようにします。
Hash[[["department_name", "department_count"], hash.first].transpose]
それとももっと単純...
{ "department_name" => hash.keys.first, "department_count" => hash.values.first }
この手順で問題を解決しました:
次のコード:
EmployeeDepartment.joins(:states).group
("employee_departments.name").count
これを生成しますrails console
SELECT COUNT(*) AS count_all, employee_departments.name AS employee_departments_name FROM "employee_departments" INNER JOIN "tickets" ON "tickets"."employee_department_id" = "employee_departments"."id" INNER JOIN "states" ON "states"."id" = "tickets"."state_id" GROUP BY employee_departments.name
私console
は以下で生成されたものを使用しました:
@department_count = EmployeeDepartment.find(:all,
:select => 'employee_departments.name AS employee_departments_name, COUNT(*) AS department_counter',
:joins => 'INNER JOIN tickets ON tickets.employee_department_id = employee_departments.id INNER JOIN states ON states.id = tickets.state_id',
:group => 'employee_departments.name')
amcharts の結果は次のようになります。
var chartData = [{"department_counter":1,"employee_departments_name":"Academic Support"}];