2017-02-05 3 views
0

Ich verwende derzeit die cities gem, um eine Liste der Städte in der Datenbank für die Erstellung von Adressen zu füllen. Ich wurde gebeten, dieses Juwel zu entfernen und alle JSON-Dateien aus dem Ordner "Städte" einzulesen, der mit dem Edelstein der Stadt geliefert wird.Iterieren durch alle Dateien in einem bestimmten Verzeichnis

Ich habe an mehreren SO Beiträge sah darüber, wie diese Umsetzung zu tun, einschließlich: Iterate through every file in one directory

Nach wit Umsetzung der Dir.glob, meine app stürzt nur voll und ganz auf die jeweilige Seite und verlässt/verlassen Sie den Server.

Andernfalls mit Dir.foreach, ich

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

Für diesen Fehler habe ich versucht, this SO post aber klar, dass ich kann wirklich nicht meine Gemfile updaten, da es mehr Probleme für mich verursacht.

Hier ist mein Code, die Errno::ENOENT produziert:

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

Ich habe auch den Code unten aus this SO post versucht, aber erhielt ein

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 

ich es aus einer einzigen Datei zum Lesen arbeiten kann Dieser Ordner ist in Ordnung, 100% keine Probleme:

@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 

(Bitte beachten Sie, dass das Array @cities hauptsächlich zum Testen verwendet wurde, ob meine Methode produzierte, was ich wollte)

Ich verwende Ruby on Rails Version 4.2.6.

+0

Was bedeutet die Protokolldatei nach dem App stürzt mit glob enthält? –

Antwort

0

Dir.foreach ist hier nicht die richtige Methode. Sein Parameter sollte ein Verzeichnis, kein Glob-Muster sein. In Ihrem Fall sucht es in Ihrem Rails-Projekt nach einem Verzeichnis, das wörtlich "cities/*.json" heißt, das offensichtlich nicht existiert.

Wenn nur gibt es .json Dateien in cities/, könnten Sie Dir.foreach("#{Rails.root}/cities/")

Dir.glob sollte die richtige Methode. Könnten Sie uns bitte die Fehlermeldung zeigen, die Sie erhalten, wenn Ihr Server abstürzt?

sollten Dieser Code funktioniert, sofern alle JSON-Dateien in "cities" sind gültig:

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

Okay, ich habe das versucht, aber es hat den Rails-Server gelöscht, als ich versuchte, die Indexseite zu laden. (platzierte es in der Indexaktion eines Controllers). – earlyriser01

+0

ist es, weil ich es in einem Array speichern? Muss ich es zu etwas anderem hinzufügen? – earlyriser01

Verwandte Themen