我目前正在处理统计信息,因此我得到一个包含所有数据的数组。问题是这个数据包含枚举,我想翻译它们而不会覆盖其余部分。
这是一个包含我的数组的给定示例(它包含几百个):
#<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;,同时保留其余的数据,因为目前,如果我在控制台中进行翻译,它会破坏其他所有内容。
你知道怎么做吗?
谢谢!
答案 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
会向您发送male
或female
infosheet[:gender]
会返回相应的整数值0
或1
答案 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}