2

这是我的情况,我通过 API 从我的 Shopify 商店获取数据并将它们保存到数据库中。我的问题是如何防止重复记录感染数据库。关于这个的任何代码片段?谢谢!我只想保存从商店创建的新条目,而不是让所有条目一遍又一遍地进入数据库。

4

2 回答 2

2

您可以validates_uniqueness_of :field在模型中添加 a,或在数据库中使用 UNIQUE 约束,或两者兼而有之。

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

于 2011-08-08T09:59:24.167 回答
0

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

products = ShopifyAPI::Product.all(params: {since_id: 12345})

或者,您可以记录上次在某处同步产品的时间,例如products_last_synced_at字段。您可以点击 Shopify API 以获取自上次同步以来已更新的记录:

products = ShopifyAPI::Product.all(params: {updated_at_min: shop.products_last_synced_at})

Product.find_or_create_by_product_id(12345)最后,我会在更新您的应用程序数据库时使用类似的东西,并使用id来自 Shopify 作为product_id本地Product模型的属性。这将确保每次同步订单时,您都在更新已同步的订单,并添加尚未同步的订单。

当然,请确保通过将以下内容放入迁移中来索引表的product_id列:products

add_index :products, :product_id, unique: true

该索引将确保您无法创建具有重复product_id值的产品记录。如果需要,对于一些奇怪的边缘情况,您总是可以挽救ActiveRecord::RecordNotUnique错误并处理它们。

于 2012-06-12T16:53:12.567 回答