我使用rails 4.1和新的枚举功能在我的模型类中包含一个枚举数组,例如:
class Campaign < ActiveRecord::Base
enum status: [:pending, :active, :paused, :complete]
end
我想查询广告系列并按状态列出计数,例如:
Campaign.all.group("status").count
这个简单的查询工作正常但是从DB返回枚举的整数值。是否有一种简单的rails方式将其转换为字符串表示形式?
答案 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) }