2017-02-05 100 views
0

我目前使用cities gem填充数据库中的城市列表以创建地址。我被要求删除这个宝石,并阅读城市宝石随附的城市文件夹中的所有json文件。遍历给定目录中的所有文件

我已经看过关于如何做到实现这一点,包括一些SO帖子:Iterate through every file in one directory

实施后机智Dir.glob,我的应用程序只是完全崩溃的特定网页上,并退出/退出服务器。

否则,Dir.foreach,我得到

Errno::ENOENT in StuffsController 
No such file or directory @ dir_initialize 

对于这个错误,我试过this SO post但意识到,我真的不能更新我的Gemfile因为它会导致更多的问题给我。

这里是我的代码产生Errno::ENOENT

@okay = Array.new 
Dir.foreach("#{Rails.root}/cities/*.json") do |json_file| 
    @okay << JSON.parse(File.read(json_file)) 
end 

我也曾尝试下面的代码从this SO post却收到一个

NameError in StuffsController 
undefined local variable or method `id' for # <StuffsController> 


@okay = Array.new 
Dir.foreach("#{Rails.root}/cities/#{id}.json") do |json_file| 
    @okay << JSON.parse(File.read(json_file)) 
end 

我可以得到它从读取单个文件该文件夹就好了,100%没问题:

@cities = Array.new 
@json = JSON.parse(File.read('cities/AD.json')) 
@json.each do |j| 
    if j.second.has_key?("accentcity") 
    @cities << j.second.select {|k,v| k == "accentcity"} 
    name = j.second.select {|k,v| k == "accentcity"} 
    City.first_or_create(name: name) 
    end 
end 

(请注意,@cities数组主要用于测试我的方法是否生成我想要的数据)

我正在使用Ruby on Rails 4.2.6版。

+0

什么用水珠您的应用程序崩溃后的日志文件包含? –

回答

0

Dir.foreach这里不是正确的方法。它的参数应该是一个目录,而不是一个glob模式。在你的情况下,它会在你的Rails项目中寻找一个字面上被称为"cities/*.json"的目录,这个目录显然不存在。

如果仅.json文件cities/,你可以使用Dir.foreach("#{Rails.root}/cities/")

Dir.glob应该是正确的方法。你能告诉我们你的服务器崩溃时得到的错误信息吗?

此代码应该工作,提供所有"cities"的JSON文件是有效的:

@okay = Dir.glob("#{Rails.root}/cities/*.json").map do |json_file| 
    JSON.parse(File.read(json_file)) 
end 
+0

好吧,我试过了,但是当我试图加载索引页时它杀死了rails服务器。 (放置在控制器的索引动作中)。 – earlyriser01

+0

是因为我将它存储到数组中吗?我需要将它添加到其他东西吗? – earlyriser01

相关问题