【问题标题】:Rails translate enum in an arrayRails 在数组中翻译枚举
【发布时间】:2018-04-23 09:05:45
【问题描述】:

我目前正在研究统计数据,所以我得到了一个包含我所有数据的数组。问题是这些数据包含枚举,我想在不覆盖其余部分的情况下翻译它们。

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

#<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>

我想翻译“方式”或“性别”或“年龄”的枚举,同时保留其余数据,因为目前,如果我在控制台中进行翻译,它会粉碎其他所有数据。

你知道怎么做吗?

谢谢!

【问题讨论】:

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


    【解决方案1】:

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

    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

    【讨论】:

      【解决方案2】:

      如果你使用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}
      

      【讨论】:

        猜你喜欢
        • 2017-08-24
        • 2022-11-30
        • 1970-01-01
        • 1970-01-01
        • 2017-10-25
        • 1970-01-01
        • 2018-06-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多