【问题标题】:undefined method to_h for Array数组的未定义方法 to_h
【发布时间】:2016-02-09 06:20:51
【问题描述】:
User.all.group('users.gender').count.map { |k, v| [User.genders.key(k), v] }.to_h

报错

NoMethodError: undefined method `to_h' for [["Male", 44], ["Female", 2]]:Array

它在 localhost 上运行良好,但在 heroku 上它会出错

【问题讨论】:

  • to_h 方法仅在Ruby version 2.1 或更高版本中可用。你的 heroku 版本低于 2.1 所以报错
  • 还有像 to_h 这样的方法吗?

标签: ruby-on-rails activerecord heroku enums


【解决方案1】:

你可以试试这样用reduce方法

User.all.group('users.gender').count.map { |k, v| {User.genders.key(k) => v} }.reduce({}, :merge)

【讨论】:

    【解决方案2】:

    Ruby

    Hash[*array.flatten]
    ...
    arr = [["Male", 44], ["Female", 2]]
    Hash[*arr.flatten]
    => {"Male"=>44, "Female"=>2}
    

    你的情况

    Hash[*(User.all.group('users.gender').count.map{ |k, v| [User.genders.key(k), v] })]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-02
      • 1970-01-01
      • 2019-11-27
      相关资源
      最近更新 更多