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ますか?

次に、ifステートメントを使用することが特定の行を取得するための最良の方法ですか?CSV全体をある種のステージングテーブルにロードしてから、必要なものを取得できますか?

4

1 に答える 1

4

row.to_hashヘッダーに基づいて属性のハッシュを生成します。特定の属性セットを選択するには、スライスを使用する必要があります。

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

2 番目の質問について: はい、まだ csv 全体をロードし、各行をチェックする必要があります。

于 2013-02-24T04:16:52.740 に答える