2016-04-09 20 views
0

Kiralama modelimdeki her satırı CSV dosyasının her sırasındaki özniteliklerle güncellemesi gereken aşağıdaki kod var. Veritabanındaki 1 kimliğine sahip satırın özniteliklerinin CSV vb. Satır 1 değerleri ile güncelleştirilmesi gerekir ... Tabloda 10000 satır ve CSV'de 10000 (başlık hariç) var.Bir CSV'den sütunları güncelleştirme

Ancak bunun yerine id = hepsi satır satır güncelliyor CSV ve ilk satırı tabloda nitelikleri nerede vb sonra ikinci, modeldeki özelliklerini güncellenmesi ...

Herhangi bir yardım mutluluk duyacağız!

csv_text = File.read(Rails.root.join('db', 'Lpostcodes.csv')) 
csv = CSV.parse(csv_text, :headers => true) 
csv.each do |row| 
    postcode = row['postcode'] 
    latitude = row['latitude'] 
    longitude = row['longitude'] 
    puts $INPUT_LINE_NUMBER 
    #update a particular row 
    Rental.update($INPUT_LINE_NUMBER, postcode: postcode, latitude: latitude, 
      longitude: longitude) 
end 

cevap

1

gördüğüne şeyi görüyoruz neden Aslında ben baştan güncellendi DB o sadece bir satırda olmalıdır görürdük gerçek sonuçları sanırdım, izah edemez ve CSV'deki her satırın üzerine.

Döngüsünüzdeki puts $INPUT_LINE_NUMBER ile beklediğim şeyi görmediğinizde (tekrar tekrar basılan tek bir sayı) çok şaşırdım. buna son IO döngünün sonunda olmak ne olduysa olacak Kodunuzdaki böylece $INPUT_LINE_NUMBER Raylar her each otomatik ayarlanmadığı için

budur, hatta bir File.read tarafından belirlenen değil.

bu çevrede en basit yolu yerine satır numarasını kullanmaya çalışıyor senin kimliğiyle döngü indeksi kullanmaktır, bu nedenle yerine csv.each kullanımı csv.each_with_index: O işlenmiş @smathy

csv.each_with_index do |row, i| 
    postcode = row['postcode'] 
    latitude = row['latitude'] 
    longitude = row['longitude'] 

    Rental.update(i, postcode: postcode, latitude: latitude, 
      longitude: longitude) 
end 
+1

Teşekkür – showFocus

İlgili konular