Импортер FasterCSV в модель DataMapper - строки не вставлены - PullRequest
2 голосов
/ 28 сентября 2010

У меня есть модель (называемая Test):

property :id,           Serial  
property :title,        String,     :length => 255, :required => true
property :description,  String,     :length => 255, :required => true
property :brand,        String,     :length => 255, :required => true
property :link,         String,     :length => 255, :required => true
property :image_link,   String,     :length => 255, :required => true
property :price,        String,     :length => 255, :required => true
property :condition,    String,     :length => 255, :required => true
property :product_type, String,     :length => 255, :required => true

Я импортирую данные из файла с разделителями табуляции, используя FasterCSV,

FasterCSV.foreach ("test.txt",{: headers => true,: quote_char => '"',: col_sep => '/ t'}) do | row_data |

 row_data = Test.first_or_new(
    'title' =>  :title,
    'description' => :supplier,
    'brand' => :brand,
    'link' => :link,
    'image_link' => :image_link,
    'price' => :price,
    'condition' => :condition,
    'product_type' => :product_type
  )

row_data.save

end

При запуске средства импорта ошибок не появляется. Ничего не появляется в таблице SQLite.

Я что-то упускаю из виду? (Таблица существует в целевой базе данных, и имена полей совпадают сзаголовки из моего файла.

1 Ответ

2 голосов
/ 28 сентября 2010

Обновление 2014/11/19: FasterCSV был удален. Теперь следует использовать стандартную библиотеку Ruby CSV. Просто замените все вхождения FasterCSV на CSV

Есть две проблемы, я думаю

  • разделитель, который вы намеревались использовать, был скорее "\ t", чем "/ t"
  • вы не используете row_data для заполнения объекта datamapper

Это должно работать лучше:

FasterCSV.foreach("test.txt", {:headers => true, :quote_char=>'"', :col_sep =>"\t"}) do |row_data|

    new_record = Test.first_or_new(
        'title' =>  row_data['title'],
        'description' => row_data['supplier'],
        'brand' => row_data['brand'],
        'link' => row_data['link'],
        'image_link' => row_data['image_link'],
        'price' => row_data['price'],
        'condition' => row_data['condition'],
        'product_type' => row_data['product_type']
    )
    new_record.save
end
...