Techioz Blog

すべてのベンダーのリストを取得しますか?

概要

私は次の操作を行って製品からベンダーを取り出し、unique を使用してフロントエンドにそれを取得し、ストア上の各ベンダーをリストします。

コントローラ:

@count = ShopifyAPI::Product.count
@n = 1
@products = ShopifyAPI::Product.find(:all, limit: 250, page: @n)
if (@count > 50) && params[:page_number]
  @page_number = params[:page_number].to_i
  @products = ShopifyAPI::Product.find(:all, params: {page: @page_number})
end

フロントエンド:

<% @products.map(&:vendor).uniq.each do |vendor| %>
...
...
<% end %>

<% if (@count > 50) && (@page_number.present? && @page_number > 1) %>
  <%= link_to "<", company_shop_vendors_path(shop_id: @shop.id, page_number: (@page_number - 1)) %> <%= link_to "1", company_shop_vendors_path(shop_id: @shop.id, page_number: 1) %> <%= link_to "#{@page_number + 1} >", company_shop_vendors_path(shop_id: @shop.id, page_number: (@page_number + 1)) %>
<% elsif (@count > 50) %>
  <%= link_to "#{@n+1} >", company_shop_vendors_path(shop_id: @shop.id, page_number: (@n += 1)) %>
<% end %>

これでベンダーを入手できますが、私が望むようにはいきません。

ページシステム全体はひどい試みであり、私は実際に検索フォームも使用していますが、これはより優れています。製品ページをページ分割しても、各ページに固有のベンダーが表示されるだけで、ページが数百ある場合は無意味です。

これを行うための最良の方法は何ですか?

すべてのベンダーをページ分割してメモリにスローし、すべてのベンダーをフロントエンドに一意に表示する方法はあるでしょうか?

それ以外の唯一のオプションは、API を直接使用する代わりに、製品 API リクエストでベンダーをデータベースに保存し、製品が Webhook を作成することです。

どう思いますか?

解決策

不気味な方法ですが、製品をループしたくない、アプリプロキシ経由では実行できない人には役立つかもしれません

これにより、すべての製品ベンダーが JSON 形式でリストされます。

自動化プロセスが中断される可能性があります。ただし、大きなデータをループしたくない場合には役立ちます。

この情報が意味を成し、役立つことを願っています。

更新:APIを使用してのみ可能になりました。以下はgraphQLクエリです

$query = '{ shop { productVendors(first:100){ edges { node } } } }';