Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在rails中检查数据库中的重复记录_Mysql_Ruby On Rails_Shopify - Fatal编程技术网

Mysql 在rails中检查数据库中的重复记录

Mysql 在rails中检查数据库中的重复记录,mysql,ruby-on-rails,shopify,Mysql,Ruby On Rails,Shopify,这就是我的情况,我通过API从我的Shopify商店获取数据并将其保存到数据库中。我的问题是如何防止重复记录侵入数据库。有关于这个的代码片段吗?非常感谢。我只希望保存从商店创建的新条目,而不是让所有条目一次又一次地进入数据库。您可以在模型中添加一个验证:字段的唯一性,或在数据库中使用唯一约束,或两者兼而有之 重复条目将引发异常,您可以捕获并忽略该异常。另一种方法是仅从Shopify获取新记录。例如,如果您正在同步产品,并且您从Shopify商店中提取的最后一个产品ID是12345,那么您只需点击

这就是我的情况,我通过API从我的Shopify商店获取数据并将其保存到数据库中。我的问题是如何防止重复记录侵入数据库。有关于这个的代码片段吗?非常感谢。我只希望保存从商店创建的新条目,而不是让所有条目一次又一次地进入数据库。

您可以在模型中添加一个
验证:字段的唯一性,或在数据库中使用唯一约束,或两者兼而有之


重复条目将引发异常,您可以捕获并忽略该异常。

另一种方法是仅从Shopify获取新记录。例如,如果您正在同步产品,并且您从Shopify商店中提取的最后一个产品ID是
12345
,那么您只需点击ID大于
12345
的所有产品的API即可:

products = ShopifyAPI::Product.all(params: {since_id: 12345})
或者,您可以在某处记录上次同步产品的时间,如
products\u last\u synced\u at
字段。您可以点击Shopify API查找自上次同步以来已更新的记录:

products = ShopifyAPI::Product.all(params: {updated_at_min: shop.products_last_synced_at})
最后,我会使用类似于
Product.find\u或\u create\u by\u Product\u id(12345)
的东西来更新应用程序数据库,并使用Shopify提供的
id
作为本地
Product
模型的
Product\u id
属性。这将确保每次同步订单时,都会更新已同步的订单,并添加尚未同步的订单

当然,请确保通过将以下内容放入迁移中,为
产品
表的
产品id
列编制索引:

add_index :products, :product_id, unique: true

此索引将确保您无法使用重复的
product\u id
值创建产品记录。如果需要,对于一些奇怪的边缘情况,您可以随时抢救
ActiveRecord::RecordNotUnique
错误并进行处理。

请提供一些代码。因此,如果这是我商店中的数据进入我的数据库:1,2,3,4,5,我加上值6,(数据现在是1,2,3,4,5,6),我的数据库中只会保存6?是这样吗?我有一个错误:ActiveRecord::RecordNotUniquee每个数据段都一个接一个地进入。如果它违反了约束,则应引发异常。忽略异常并继续下一条记录。是的,我认为它违反了我在数据库中所做的约束,这就是为什么我会出现该错误。那么我怎样才能破例进入下一个记录呢?这个错误使我无法继续前进。很抱歉,我是rails新手。begin//your code here rescue Exception=>e//do nothing here end