ベンダー独自の在庫管理システムとShopifyショップの間に位置するアプリを書いています。アプリは、在庫管理システムによって生成された新しいデータからShopifyを定期的に更新します。また、ShopifyWebhookのエンドポイントも提供します。
私は現在このようなことをしています(多くのものが省略された疑似ルビー):
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はローカルにキャッシュされています)。更新サイクルには、それぞれ16のバリアントを持つ24の製品を更新するのに約25分かかります。Railsは私の製品/バリアントプロキシの更新に2秒もかかりません。残りの99%は、Shopifyとの会話に費やされています。私は何か間違ったことをしているに違いない。
リモートオブジェクトのIDを知っているとすると、最初にフェッチしなくても、リモートオブジェクトを直接更新する方法はありますか?
乾杯、-tomek