Имя отсутствующих атрибутов в рельсовой ассоциации

У меня есть следующий запрос в моем приложении rails, но его результат не имеет имени атрибута, поэтому я не могу использовать его в amcharts

EmployeeDepartment.joins(:states).group
("employee_departments.name").count

результат: {"Academic Support":1}

как сделать так {"department_name":"Academic Support","department_count":1}

2 ответа

Решение

Я решил свою проблему с помощью следующих шагов:

следующий код:

 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"}];

Допустим, у вас есть такой хеш:

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}] 

Если ваш хеш содержит только одну пару ключ / значение, и вы просто хотите другой хеш, вы можете попробовать это:

 Hash[[["department_name", "department_count"], hash.first].transpose]

Или даже проще...

 { "department_name" => hash.keys.first, "department_count" => hash.values.first }
Другие вопросы по тегам