假设我有一个模型Product
。
有一段时间我得到一个包含新产品的文件,问题是其中一些可能已经输入到数据库中。
数据不包含任何唯一键,并且可以使用不同的字段进行不同的结构化。我能做的是根据我拥有的所有数据从DB中选择,如果找到了产品,则不要从文件中保存产品。
Product.where(:name => p.name, :desc => p.desc, :source => "some source", [more fields])
所以我的问题是,是否有更好的轨道方式来检查记录是否已经存在?
插入一些独特的密钥失败,这不是一个好主意IMO,但也可以工作。
答案 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])