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

R队

我有一个有效的导入器功能。问题是如果记录已经在表中,它将创建一个重复项。表中只有一个字段称为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

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

在控制器中,我有:

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如果该项目不在数据库中,这将使导入工作。如果记录在导入过程中存在,则您仍将需要构建捕获以跳过。否则,您将得到一个错误。因此添加了该行的原始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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Android记录在数据库中存在()?

如果iOS sqlite中不存在数据库,则导入

从Access数据库中删除不存在的记录

如果使用MySQL在数据库中不存在数据,如何获取计数0

如何使用zend中的db-table在数据库的表中定义表记录是否最不存在

如果laravel 5.4上不存在,请不要保存在数据库中

如何删除Moviestars2019匹配查询不存在数据库表中不存在的值的错误

laravel数据表过滤列在数据库中不存在

如何防止零值记录在数据库中

如何区分到达和离开时间以记录在数据库中

列表中不存在的数据库中存在的记录

如果文本框为空但数据仍要记录在数据库中,则进行自定义验证

Rails显示不存在的数据库记录

Ambari 1.7安装无法注册主机-主机条目在数据库中不存在

文件在数据库中不存在-SQL Server快照

Postgres:psql:致命:Windows 10 中不存在数据库“root”

Node js和mongo更新文件中不存在的数据,但数据库中存在数据

如果在选择时不存在在口才数据库中创建记录,

从表中选择数据库中不存在的其他预定义记录

更新或插入多个记录(如果不存在于mysql数据库的表中)

流明验证:数据库中不存在价值规则

获取数据库中不存在的数据

使用数据库中的记录在数据表中设置单选按钮

在数据库中记录数据之前等待验证

数据库DNN中不存在域名

忽略数据库中不存在的列

如果数据库中不存在某些内容

如果FuelPHP中不存在,则创建数据库

docker容器中不存在postgres数据库