2016-01-28 6 views
0

В настоящее время у меня есть файл csv, который заполняет таблицу. Я wanitng от графика, так что он работает ежедневно. Однако вместо того, чтобы стереть таблицу, возможно ли ее получить, чтобы она только добавила то, что еще не существует?Таблица данных базы данных csv

Допустим, у меня есть этот макет в настоящий момент.

Title|Name|Date|Url| 
1 |2 |3 |4 | 

Тогда мой CSV имеет это в нем

Title|Name|Date|Url| 
1 |2 |3 |4 | 
1 |2 |3 |7 | 

Можно ли игнорировать первую строку CSV и добавить вторую в поле столбца URL отличается?

Вот что я до сих пор

require 'open-uri' 
require 'csv' 
namespace :event do 
    task reload: :environment do 
    ActiveRecord::Base.connection.execute("TRUNCATE events RESTART IDENTITY") 
     gzipped = open('URL LINK HERE') 
     csv_text = Zlib::GzipReader.new(gzipped).read 
     csv = CSV.parse(csv_text, :headers=>true) 
     csv.each do |row| 
     Event.create(time: row[9], date: row[10], URL: row[8], eventname: row[7]) 

     end 
    end 
end 

Я знаю, что, очевидно, я буду смотреть на устранение этой лжи и chanign его обновление какой-то?

ActiveRecord::Base.connection.execute("TRUNCATE events RESTART IDENTITY") 

Также я использую рельсы, если это вообще помогает?

+0

вы должны отслеживать, где вы остановились в файле CSV. например сохраните местоположение смещения байта/файла, затем 'seek()' там каждый раз. –

+0

CSV постоянно перемещается, его нужно будет проверять каждый раз. Единственное, что остается прежним, - это заголовки, а URL-адреса - это уникальные вещи. – SamAdmit

+0

, то, вероятно, самая простая задача - загрузить весь csv в временную таблицу, а затем объединить эту временную таблицу с «реальной» таблицей, чтобы добавить новые записи. –

ответ

0

Вы можете использовать find_or_create_by, например:

Event.find_or_create_by(time: row[9], date: row[10], URL: row[8], eventname: row[7]) 

Это будет только создать новую строку, если она не находит совпадение на всех 4-х полей.

Источник: http://api.rubyonrails.org/classes/ActiveRecord/Relation.html#method-i-find_or_create_by

+0

Эй, мне просто нужно удалить эту строку вправо ?, 'ActiveRecord :: Base.connection.execute (« TRUNCATE events RESTART IDENTITY »)' – SamAdmit

+0

@SamAdmit oh yes, you wouldn Мне больше не нужна эта линия. – miligraf

+0

Briliant! Работал – SamAdmit

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