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

时间:2011-08-08 09:51:29

标签: mysql ruby-on-rails shopify

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

2 个答案:

答案 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错误并处理它们。