Ruby Error Help,枚举器

时间:2015-09-11 02:27:46

标签: ruby-on-rails ruby

我有一些本地工作的代码,但是当它在服务器上运行RSPEC时,我的构建失败了。

这是我的代码:

def sort_software_list(software_list)
  pkgs = JSON.load(File.read("#{Rails.root}/lib/tasks/pkgs.json"))
  hash = pkgs.map { |e| e["name"] }.each_with_index.to_h
  sorted_list = software_list.sort_by { |e| hash[e.name]}
  sorted_list
end

它需要一个Rails项目中的文件,它只是一个json文件。该函数接受software_list并使用json文件所在的正确顺序对其进行排序。

所以我在失败的rspec上的错误是:

undefined method `to_h' for #<Enumerator:0x0000000db66b30>

我无法想到发生这种情况的原因。就像我说的那样,就我所知,它在本地工作。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我愿意打赌你的本地机器有Ruby 2.1.0或更高版本,而你的服务器版本较小。在Ruby 2.1.0之前,枚举器没有获得to_h方法(通过Enumerable)。一个简单的解决方法是在将枚举器转换为数组后使用Hash.[]方法:

hash = Hash[ pkgs.map {|e| e["name"] }.each_with_index.to_a ]

您可能还发现使用rbenv或RVM管理项目的Ruby版本非常有用,以确保您在开发和生产中使用相同的版本。