2013-02-24 64 views
3
require 'csv'  

CSV.foreach(filename, :headers => true) do |row| 
    if column3 = true || column 4 = true 
    Model.create!(row.to_hash) 
    else 
    skip 
    end 
end 

首先,有沒有辦法在row.to_hash期間只抓取某些列?從導入CSV的特定行和列

二,是我使用if聲明抓取特定行的最佳方式嗎? 我可以將整個CSV加載到某種排序表,然後抓住我需要的東西嗎?

回答

4

row.to_hash將根據標題產生屬性的散列。要選擇一組特定的屬性,應該使用切片。

>> row.to_hash # { :attr1 => 'val1', :attr2 => 'val2', :attr3 => 'val3' } 
>> row.to_hash.slice(:attr1, :attr2) # { :attr1 => 'val1', :attr2 => 'val2' } 

關於第二個問題:是的,你仍然需要加載整個CSV,只是覈對每行。

+0

你對我很好,jvnill。謝謝! – Dudo 2013-02-24 04:20:29