Rails:检查数据库中是否已存在新记录的最有效方法

时间:2014-05-05 17:32:21

标签: ruby-on-rails activerecord ruby-on-rails-4

假设我有一个模型Product

有一段时间我得到一个包含新产品的文件,问题是其中一些可能已经输入到数据库中。

数据不包含任何唯一键,并且可以使用不同的字段进行不同的结构化。我能做的是根据我拥有的所有数据从DB中选择,如果找到了产品,则不要从文件中保存产品。

Product.where(:name => p.name, :desc => p.desc, :source => "some source", [more fields])

所以我的问题是,是否有更好的轨道方式来检查记录是否已经存在?

插入一些独特的密钥失败,这不是一个好主意IMO,但也可以工作。

1 个答案:

答案 0 :(得分:3)

您可以使用exist?这样的功能:

if Product.where(:name => p.name, :desc => p.desc, :source => "some source", [more fields])
  # do something
else
  # do something else
end

如果您的目标是创建新记录,如果它不存在,您也可以使用find_or_create_by

Product.find_or_create_by(:name => p.name, :desc => p.desc, :source => "some source", [more fields])