如何订购group_by数据

时间:2014-02-11 18:44:38

标签: ruby-on-rails ruby

我正在尝试使用由企业员工组成的展示位置模型创建图表。

我使用以下代码:

def self.chart_data(business)
 business.placements.order(:month).group_by(&:month).map  do |month, data|
  hash = {month: month.strftime("%Y-%m")}
  data.each {|placement| hash[placement.employee.name] = placement.position}
  JSON.parse(hash.to_json)
 end
end 

生成以下数据:

[{"month"=>"01/2014", "John"=>3, "Glen"=>4, "Frank"=>5}, {"month"=>"02/2014", "John"=>1, "Glen"=>2, "Frank"=>3}]

我现在需要为图表指定标签,这些标签将是员工的名称。

如何在保持员工姓名顺序的同时执行此操作?即。

["John", "Glen", "Frank"]

如果我获得每个企业的员工姓名,那么相对于安置数据的名称是无序的:

@business.employees.pluck(:name)

["Frank", "John", "Glen"]

1 个答案:

答案 0 :(得分:0)

您可以尝试以下操作:

chart_data = Placement.chart_data(@business)
employees_names = chart_data.flat_map(&:keys).uniq.select{ |name| name.to_s != 'month' }
# should return
# => ["John", "Glen", "Frank"]