首页 > 解决方案 > 仅提取自上次提取以来创建的记录的最有效方法是什么?

问题描述

我正在构建一个 Shopify 应用程序,我希望我的客户(店主)偶尔将应用程序与他们的商店数据“同步”,特别是针对他们的Order数据(忽略我还将有一个网络钩子将这些数据推送到我的每当创建新订单时应用程序)。

现在,仅出于粗略说明的目的,我正在这样做(在开发模式下工作):

store_orders = ShopifyAPI::Order.find(:all)
store_orders.each do |sorder|
  new_order = Order.find_or_create_by(s_order_id: sorder.id)
  new_order.update(
    currency: sorder.currency,
    ...
  )      

所以,我直接从ShopifyAPI. 理想情况下,我希望只提取尚未同步的新订单。

我有两个限制:

所以这给我留下了两个问题:

  1. 让我快速找到尚未拉出的记录并仅拉出那些记录的另一种有效方法是什么?
  2. 如何确保仅在本地更新任何属性已更改或之前不存在记录的记录?(即我试图避免更新已拉出的每条记录)。

标签: ruby-on-railsshopifyruby-on-rails-6shopify-appshopify-api

解决方案


我不确定您在哪里认为 Shopify 订单 ID 是“随意的”而不是“顺序”的?如果你研究这些东西,你会发现它们是整数,实际上它们是有序的,因为一个在另一个之后创建的订单会有一个更大的 ID。

因此,您可以做的最酷的小事情,真的很简单,就是使用被称为“since_id”的 Shopify API 过滤器。假设您将上次提取的 ID 存储在您保留的商店模型上的 since_id 字段中,那么您可以仅提取自上次拉动以来命中 Shopify 的订单。

试试看。它完美地工作。我多年来一直这样做。处理完一批订单后,只需更新数据库中的 since_id,然后在下次需要更多订单时,使用您的 since_id 进行过滤。


推荐阅读