2016-03-25 8 views
0

lese ich in einer CSV-DateiWie eine Reihe von CSV in Ruby mit Table.delete_if()

require 'csv' 

recipients = CSV.read('recipients.csv', headers: true) 

found = [] 
if User.find_by(email: recipients['email']) 
    found << recipients['email'] 
end 

table = CSV.table('recipients.csv') 

table.delete_if do |t| 
    found.each { |f| t['email'] == f['email']} 
end 


CSV.open('/tmp/users.csv', 'wb') do |w| 
    w << found.to_csv 
end 

Die folgende Zeile löschen: found.each { |f| t['email'] == f['email']} Ergebnisse in einem

TypeError: no implicit conversion of String into Integer from lib/scripts/foo.rb:13:in []‘ `

Es ist offensichtlich, dass ich nicht weiß, wie man delete_if verwendet und wie man die Typabweichung in diesem Fall auflöst. Also, Hilfe wird sehr geschätzt.

+0

könnten Sie bitte posten wenig mehr von dem Fehlerprotokoll? – illusionist

+0

Das ist das Fehlerprotokoll. Es ist ein Typenkonflikt. Die Frage ist, warum. Und wie man den richtigen Vergleich macht. – jottr

Antwort

0

in Zeilennummer 13

found.each { |f| t['email'] == f['email']} 

f ist eine Instanz Array und Ihre versuchen, ein String als Index zu übergeben, so dass diese stattgefunden haben könnte.

Erklärung

> a=[] 
=> [] 
2.2.1 :015 > a['email'] 
TypeError: no implicit conversion of String into Integer 
    from (irb):15:in `[]' 

> a=['email', 'ram'] 
=> ["email", "ram"] 
2.2.1 :018 > a['email'] 
TypeError: no implicit conversion of String into Integer 
    from (irb):18:in `[]' 
Verwandte Themen