2013-02-24 2 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

Смежные вопросы