我正在构建一个Shopify应用程序,我希望我的客户(店主(偶尔将该应用程序与他们的商店数据"同步",特别是针对他们的Order
数据(忽略这样一个事实,即每当创建新订单时,我也会有一个webhook将这些数据推送到我的应用程序(。
现在,为了粗略的说明,我正在做这个(在开发模式下工作(:
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
中提取所有订单。理想情况下,我希望只提取尚未同步的新订单。
我有两个限制:
ShopifyAPI
产生的Order IDs
不是按顺序排列的,并且可能是相对随意的- 我无法根据
updated_at
日期对ShopifyAPI
进行where
查询,即只选择上次同步日期之后的记录(ShopifyAPI
目前不允许这样做,我不确定将来是否会解决(
所以这给我留下了两个问题:
- 对我来说,还有什么有效的方法可以快速找到尚未提取的记录,只提取这些记录
- 如何确保只在本地更新任何属性已更改或以前不存在记录的记录?(即,我尽量避免更新已提取的每一条记录(
我不确定你认为Shopify订单ID在哪里"随意的";而不是在";顺序的";顺序如果你研究这些东西,你会发现它们是整数,事实上,它们是有序的,因为一个接一个创建的订单将有一个更大的ID。
因此,你能做的最酷的小事情,真的很容易,就是使用Shopify API过滤器,称为";since_id";。假设您将上次提取的ID存储在您保留的商店模型的SINCE_ID字段中,则您可以奢侈地只提取自上次提取以来击中Shopify的订单。
试试看,效果很好。我已经做了很多年了。处理完一批订单后,只需更新数据库中的since_id,然后下次需要更多订单时,使用since_ids进行筛选。