gpt4 book ai didi

ruby-on-rails - 如何使用 ShopifyAPI (Ruby on Rails) 有效地更新许多 ShopifyAPI::Product 实例?

转载 作者:行者123 更新时间:2023-12-02 22:27:12 24 4
gpt4 key购买 nike

我正在编写一个应用程序,它将位于供应商专有库存管理系统和他们的 Shopify 商店之间。该应用程序将根据库存管理系统生成的新数据定期更新 Shopify。它还将为 Shopify webhooks 提供端点。

我目前正在做这样的事情(省略了很多东西的伪 ruby ):

  def update_product_with_proxy(product_proxy)
product_proxy.variant_proxies.dirty.each do |variant_proxy|
update_variant_with_proxy(variant_proxy)
end

if product_proxy.dirty_proxy
shopify_product = ShopifyAPI::Product.find(product_proxy.shopify_id)
shopify_product.update_attributes({some attributes here})
end
end

其他地方:

  def update_variant_with_proxy(variant_proxy)
shopify_variant = ShopifyAPI::Variant.find(variant_proxy.shopify_id)
shopify_variant.update_attributes({some attributes here})
end

这似乎非常低效,因为我必须先获取每个更新的 ShopifyAPI::Product 和 ShopifyAPI::Variant,然后才能更新它们(我将它们的 ID 缓存在本地)。一个更新周期大约需要 25 分钟,更新 24 个产品,每个产品有 16 个变体。 Rails 花费不到 2 秒来更新我的产品/变体代理。其他 99% 的时间都花在与 Shopify 交谈上。我一定是做错了什么。

鉴于我知道远程对象的 ID,有没有办法直接更新它而不必先获取它?

干杯,-托梅克

最佳答案

首先要做的是:您可以通过其父产品更新变体。一旦您获取了产品,它就会包含变体信息,因此您可以对其进行编辑、保存,并且更改将保留在单个 API 调用中。这将为您节省一些时间。

其次:您可以使用 gem 在本地创建一个对象,为其指定一个 id,然后调用 save 来发起 PUT 请求,而无需先从 Shopify 中获取该对象。像这样的东西应该可以解决问题:

product = ShopifyAPI::Product.new(:id => 1, :title => "My new title")
product.save

将这两件事放在一起应该可以满足您的需求:在单个 API 调用中更新产品变体的能力。

注意:为了将来引用,shopify_api gem 建立在 Active Resource 上,因此您可以使用该库做任何您可以使用 gem 做的事情。

关于ruby-on-rails - 如何使用 ShopifyAPI (Ruby on Rails) 有效地更新许多 ShopifyAPI::Product 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12798708/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com