2016-12-22 9 views
0

Active record Import gemを使用して、CSVファイルのデータをデータベースに一括インポートしています。しかし、インポートするときにCSV列をスキップする必要があります。Ruby CSV | CSVを読みながらいくつかの列をスキップする方法は?

たとえば、私のxaa.csvには、名前、著者、著者ID、評価などのヘッダーがあります。 インポート中に、 'author_id'列の値をスキップして、他のすべての列をインポートしたいとします。

books = CSV.read("/public/xaa.csv") //What more should I do here to skip the 3rd column 
columns = [:name, :author, :rating] 
Book.import columns, books, :validate => false 
+1

何を試しましたか?あなたはヘッダーオプションを見ましたか?ヘッダーを読み取って、列に基づいて各行を選択的にインポートすることができます。私はいつもそうします – MageeWorld

+0

これを試してください 'columns = [:name、:author、nil、:rating]' – sa77

答えて

4
books = [] 

CSV.foreach('/public/xaa.csv', headers: true) do |row| 
    books << [row['name'], row['author'], row['rating']] 
end 

columns = [:name, :author, :rating] 
Book.import(columns, books, validate: false) 
+0

これは機能上、元のコードと変わりはありません。 "3番目の列をスキップする"の方法については、行['rating'] = nilを設定するか、書籍の3番目の位置にnilを置き換える必要があります。<< – whodini9

+0

ありがとう@vegetaras。 – Mahendhar

0
books = CSV.readlines(path, headers:true).map{|row| row.values_at('name','rating') } 

vegetarasのバージョンは少しより多くのメモリが効率的です。

関連する問題