gpt4 book ai didi

sqlite - 导入前如何验证数据库中不存在记录?

转载 作者:行者123 更新时间:2023-12-03 18:43:55 25 4
gpt4 key购买 nike

我有一个有效的导入器功能。问题是如果记录已经在表中,它会创建一个重复项。表中只有一个名为 mtype 的字段。所以CSV文件看起来像

mtype
HP360
Dell

正在工作的导入:
require 'csv'
class Modeltype < ApplicationRecord
def self.import(file)
CSV.foreach(file.path, headers: true) do |row|
Modeltype.create! row.to_hash
end
end
end

我试图搜索以查看该记录是否在数据库中:
require 'csv'
class Modeltype < ApplicationRecord
def self.import(file)
CSV.foreach(file.path, headers: true) do |row|
tag = row.to_hash
if Modeltype.find_by_mtype(tag) == nil
Modeltype.create! row.to_hash
end
end
end
end

当我这样运行它时,它会返回“无法转换哈希错误”。

在 Controller 中我有:
def import
Modeltype.import(params[:file])
redirect_to modeltypes_url, notice: "Model Types imported."
end

如何搜索以查看记录是否已存在?如果它不存在则创建它,如果它存在则跳过该行?我也尝试使用标志 validates_presence_of,但这也没有用。

我似乎记得以前在另一个项目上使用过 validates_uniquness_of,这可能有用吗?

最佳答案

在您的 modeltype.rb 文件中,在您的 def 之外添加该行,但在 Modeltype validates_uniqueness_of :mtype 类中.如果项目不在数据库中,这将允许导入工作。如果在导入期间存在记录,您仍需要构建一个 catch 以跳过。否则你会得到一个错误。因此,添加了该行的原始 def 如下所示:

require 'csv'
class Modeltype < ApplicationRecord
validates_uniqueness_of :mtype
def self.import(file)
CSV.foreach(file.path, headers: true) do |row|
Modeltype.create! row.to_hash
end
end
end

关于sqlite - 导入前如何验证数据库中不存在记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48910529/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com