我有一个简单的事情就是每天手动导入事务数据的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
答案 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