忽略CSV导入中已导入的记录

时间:2014-08-16 12:55:05

标签: ruby-on-rails sqlite csv

我有一个简单的事情就是每天手动导入事务数据的CSV文件并将它们放入SQLite数据库中。

如果导入包含以前导入的记录的文件,我想忽略导入这些记录。我如何最好地实现这一目标? (我有一个名为'aka_reference'的字段,理论上应该是唯一的。)

型号:

class Transaction < ActiveRecord::Base
    def self.import(file)
        CSV.foreach(file.path, headers: true) do |row|
            Transaction.create! row.to_hash
        end
    end
end

2 个答案:

答案 0 :(得分:1)

如果aka_reference是交易中的属性,则很容易......

Transaction.create!(row.to_hash) unless Transaction.find_by(aka_reference:  row.to_hash['aka_reference'])

答案 1 :(得分:1)

有两种可能性。您可以使用find_or_create_by方法。像这样的东西

 class Transaction < ActiveRecord::Base
    def self.import(file)
        CSV.foreach(file.path, headers: true) do |row|
            Transaction.find_or_create_by row.to_hash
        end
    end
end

另一种情况是使用aka_reference字段。像这样的东西

 class Transaction < ActiveRecord::Base
    def self.import(file)
        CSV.foreach(file.path, headers: true) do |row|
            data = row.to_hash
            Transaction.create!(data) unless Transaction.exists?(aka_reference: data[:aka_reference])           
        end
    end
end