ENUM的Activerecord Group

时间:2015-04-27 11:28:12

标签: ruby-on-rails activerecord

我使用rails 4.1和新的枚举功能在我的模型类中包含一个枚举数组,例如:

class Campaign < ActiveRecord::Base    
  enum status: [:pending, :active, :paused, :complete]

end

我想查询广告系列并按状态列出计数,例如:

Campaign.all.group("status").count

这个简单的查询工作正常但是从DB返回枚举的整数值。是否有一种简单的rails方式将其转换为字符串表示形式?

3 个答案:

答案 0 :(得分:11)

只需将数字映射到相关的字符串值:

Campaign.all.group(:status).count.map { |k, v| [Campaign.statuses.key(k), v] }.to_h

答案 1 :(得分:2)

如果您想对状态进行计数

campaigns = Campaign.all.group(:status).count

@campaigns = Campaign.statuses.map { |k, v| [k , campaigns[v] || 0] }

它将给出类似的输出

{“待处理” => 0,“有效” => 1,“已暂停” => 0,“完成” => 0}

答案 2 :(得分:0)

您也可以使用rails #transform_keys方法:

Campaign.all.group(:status).count.transform_keys { |k| Campaign.statuses.key(k) }