こんにちは、Shopify アプリで Shopify gem を使用しています。Shopify への API 接続を処理する方法についての提案を探しています。
私は webhook とdelayed_jobs を使用しているため、コントローラーの外部で接続を開く方法が必要です。
現時点では、このメソッドを Shop モデルに追加しました。
def connect_to_store
session = ShopifyAPI::Session.new(self.url, self.access_token)
session.valid?
ShopifyAPI::Base.activate_session(session)
end
したがって、接続を非常に簡単に開くことができます。たとえば、次のようになります。
Shop.find(1).connect_to_store
ShopifyAPI::Shop.current.name
問題は、製品モジュール内で、いくつかのメソッド内で接続を開く必要があることですが、connect_to_store メソッドを数回呼び出すことになり、実際には必要なく同じストアへの複数の接続を開くことを心配しています。
接続が既に開かれているかどうかを確認し、別の接続が見つからない場合にのみ新しい接続を開く方法はありますか?
ありがとう、アウグスト
- - - - - - - - - - アップデート - - - - - - - - - -
私の問題をよりよく説明します。
Product モデルで、特定の商品の compare_at_price がその価格よりも高いかどうかを確認したいとします。この場合、Shopify 商品に「セール」タグを追加したいとします。
私の製品モデルには次のものがあります。
class Product < ActiveRecord::Base
belongs_to :shop
def get_from_shopify
self.shop.connect_to_store
@shopify_p = ShopifyAPI::Product.find(self.shopify_id)
end
def add_tag(tag)
@shopify_p = self.get_from_shopify
shopify_p_tags = shopify_p.tags.split(",")
shopify_p_tags.collect{|x| x.strip!}
unless shopify_p_tags.include?(tag)
shopify_p_tags << tag
shopify_p_tags.join(",")
shopify_p.tags = shopify_p_tags
shopify_p.save
end
end
def on_sale?
@shopify_p = self.get_from_shopify
sale = false
shopify_p.variants.each do |v|
unless v.compare_at_price.nil?
if v.compare_at_price > v.price
sale = true
end
end
end
return sale
end
def update_sale_tag
if self.on_sale?
self.add_tag("sale")
end
end
end
私の問題は、私が電話した場合:
p.update_sale_tag
Shop.connect_to_store が数回呼び出され、既に認証されている間に何度か認証します。
このコードをどのようにリファクタリングしますか?