Rails在数组中翻译枚举

时间:2018-04-23 09:05:45

标签: ruby-on-rails json ruby enums translate

我目前正在处理统计信息,因此我得到一个包含所有数据的数组。问题是这个数据包含枚举,我想翻译它们而不会覆盖其余部分。

这是一个包含我的数组的给定示例(它包含几百个):

#<Infosheet id: 90, date: "2018-04-22 00:00:00", number: 7, way: "home", gender: "man", age: "age1", district: "", intercommunal: "", appointment: true, othertype: "", otherorientation: "", user_id: 3, created_at: "2018-04-22 17:51:16", updated_at: "2018-04-22 17:51:16", typerequest_id: 168, orientation_id: 188, info_number: nil, city_id: 105>

我想翻译&#34; way&#34;的枚举。或&#34;性别&#34;或者&#34; age&#34;,同时保留其余的数据,因为目前,如果我在控制台中进行翻译,它会破坏其他所有内容。

你知道怎么做吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

您可以循环遍历所有枚举属性并获取其值。稍后您可以合并并传递包含转换值的新哈希

ENUM_COLUMNS = %i[way gender age] # Equivalent to [:way, :gender, :age]

def convert_enums
  overrided_attributes = {}
  ENUM_COLUMNS.each { |column| overrided_attributes[column.to_s] = self[column] }
  attributes.merge(overrided_attributes)
end

注意:

虽然infosheet.gender会向您发送malefemale infosheet[:gender]会返回相应的整数值01

答案 1 :(得分:0)

如果您使用translate enum gem:

,则可以对此进行测试
a = Infosheet.group(:gender).count
{“male”=>30, “female”=>6532}

创建哈希

r = Hash.new

用以下内容填充:

a.each {|s| puts r[Infosheet.translated_gender(s[0])]=s[1] } 
r

结果:

 {“homme”=>30, “femme”=>6532}