目前我有一个填充表格的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
我知道显然我会考虑删除这个谎言并将其更改为某种更新吗?
ActiveRecord::Base.connection.execute("TRUNCATE events RESTART IDENTITY")
如果它有帮助的话我也会使用rails吗?
答案 0 :(得分: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