2016-04-09 6 views
0

レンタルモデルの各行をCSVファイルの各行の属性で更新する予定の次のコードがあります。データベースのIDが1の行は、CSVなどの行1の値で更新された属性を持つ必要があります。私はテーブルに10000行、CSVには10000(ヘッダを除く)を持っています。CSVの列を更新する

しかし代わりに、ID =それは任意の助けをいただければ幸いです...など2番目、CSVの最初の行を持つテーブルに

を、すべての行の属性を更新している行のモデルに属性を更新!

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 

答えて

1

私は実際にあなたが見ているものを見ている理由は、私はあなたが見てきたと思います実際結果があなたのDB内の1行のみを超える更新されたことだろうと思っているだろう説明することはできませんCSVの各行で上書きします。

私はまた、あなたのループのputs $INPUT_LINE_NUMBERで私が期待していたものを見ていないことに驚いています(何度も何度も繰り返し印刷されています)。

これは$INPUT_LINE_NUMBERはRailsの中ですべてのeachで自動的に設定されていないので、それがさえFile.readで設定されていないされているので、あなたのコードでは、最後のIOループの最後であることを起こっ何だろう。

これを回避する最も簡単な方法は、代わりに行番号を使用しようとするあなたのIDとしてループインデックスを使用することで、その代わりにcsv.each使用csv.each_with_index:その加工さ@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

感謝 – showFocus

関連する問題