这是我的情况,我通过API从Shopify商店获取数据并将其保存到数据库中。我的问题是如何防止重复记录侵扰数据库。关于这个的任何代码片段?谢谢!我只希望保存从商店制作的新条目,而不是让所有条目一遍又一遍地进入数据库。
答案 0 :(得分:2)
您可以在模型中添加validates_uniqueness_of :field
,也可以在数据库中使用UNIQUE约束,或两者都使用。
重复的条目会引发一个异常,您可以捕获并忽略该异常。
答案 1 :(得分:0)
另一种方法是仅从Shopify中获取新的记录。例如,如果您正在同步产品,并且您从Shopify商店中提取的最后一个产品ID为12345
,那么您只需点击ID大于{{1}的所有产品的API }:
12345
或者您可以记录上次将产品同步到某个位置,例如products = ShopifyAPI::Product.all(params: {since_id: 12345})
字段。您可以点击Shopify API获取自上次同步以来已更新的记录:
products_last_synced_at
最后,我会在更新您的应用数据库时使用类似products = ShopifyAPI::Product.all(params: {updated_at_min: shop.products_last_synced_at})
的内容,并使用来自Shopify的Product.find_or_create_by_product_id(12345)
作为您本地id
模型的product_id
属性。这将确保您每次同步订单时,您正在更新已同步的订单,并添加尚未同步的订单。
当然,请确保通过将以下内容放入迁移中来索引Product
表的product_id
列:
products
此索引将确保您无法创建具有重复add_index :products, :product_id, unique: true
值的产品记录。如果需要,对于一些奇怪的边缘情况,您可以随时解决product_id
错误并处理它们。