【问题标题】:Ruby on Rails Query Result GroupRuby on Rails 查询结果组
【发布时间】:2016-02-01 04:36:31
【问题描述】:

在我的控制器中

 def services
   @services = WorkQuote.group(:work_type_id).count

  end

在 IRB 中运行时:

irb(main):016:0> @services = WorkQuote.group(:work_type_id).count
   (0.7ms)  SELECT COUNT(*) AS count_all, work_type_id AS work_type_id FROM "work_quotes" GROUP BY "work_quotes"."work_type_id"
=> {1=>2, 3=>1}

请注意,结果是 {1=>2, 3=>1}。在我的控制器中,我想创建一个循环来构建一个新数组,其中=> 左侧的数字通过插入到此WorkType.find(number to the left of =>).worktype 中来解决

所以新数组看起来像 [Install=>2, Repair=>1} 假设 WorkType.find(1).worktype = InstallWorkType.find(3).worktype = Repair

【问题讨论】:

    标签: ruby-on-rails arrays ruby loops activerecord


    【解决方案1】:

    这对我有用,尽管我确信有一种更清洁的方法。

    基本上使用 .each_key 抓取每个值并将其推送到数组中。接下来我做了一个循环来获取每个哈希右侧的“计数”。同样在循环中,我创建了一个数组,它结合了 WorkType id 的解析名称和“计数”。

    我意识到在这种情况下不需要@printcount。

     @services = WorkQuote.group(:work_type_id).count
       @printservices = []
       @services.each_key {|key| @printservices.push(WorkType.find(key).worktype) }
    
       @services = @services.to_a
    
       @printcount = []
       @printdisplay = []
       iz = 0
    
        while iz < @services.size
          @printcount[iz] = @services[iz][1]
          @printdisplay[iz] = [@printservices[iz], @services[iz][1]]
          iz = iz + 1
        end
    

    【讨论】: