【问题标题】:Products Filter by title in rails app + shopify_app gem产品在 rails app + shopify_app gem 中按标题过滤
【发布时间】:2020-06-10 09:26:17
【问题描述】:

我几乎什么都试过了。检查了所有文档和堆栈问题以及 shopify 社区,例如:

Shopify API how to do a search query with like

https://community.shopify.com/c/Shopify-APIs-SDKs/Shopify-api-search-products-by-title/td-p/341866

How to search products by title using Shopify product search API?

https://github.com/Shopify/shopify_app

https://community.shopify.com/c/Shopify-APIs-SDKs/Search-product-from-title-handle-and-description/td-p/469156

发现了

@search = "2018";
@products = ShopifyAPI::Product.find(:all, params: { limit: 10,title:@search })

但这会返回空数组,尽管我有可能在标题中包含它的记录。 https://prnt.sc/sx37o6

我想根据@search获取记录

我也尝试过 Product.search,但它导致:ShopifyAPI::Product:Class 的未定义方法“搜索”

【问题讨论】:

  • 那可能是因为它正在搜索具有确切标题“2018”的产品,而您的产品开始于 2018。对shopify不是很熟悉,但简要浏览一下上面的链接表明它们不支持通配符/LIKE/ILIKE 查询
  • 是的,这就是 GraphQL API 支持的原因

标签: ruby-on-rails shopify-app


【解决方案1】:

使用 RestAPI 我也未能进行过滤(例如使用通配符)。但是使用 GraphQL-API 的搜索功能(参见此处 https://shopify.dev/concepts/about-apis/search-syntax)非常可靠。

这是一个示例,包括身份验证、按标题过滤,包括通配符支持(用于部分匹配)以及将结果映射到简单的哈希数组:

@responses = []

shopify_session = ShopifyAPI::Session.temp(
  domain:  shop.shopify_domain,
  token: shop.shopify_token,
  api_version: ShopifyApp.configuration.api_version
) do
  client = ShopifyAPI::GraphQL.client
  ql_query = <<-GRAPHQL
    {
      products(first: 10, query: "title:*#{query}*") {
        edges {
          node {
            id
            title
            handle
          }
        }
      }
    }
  GRAPHQL

  query_result = client.query(client.parse(ql_query))
  query_result.data.products.edges.each do |result|
    @responses << {
      id: result.node.id,
      title: result.node.title,
      handle: result.node.handle
    }
  end
end

@responses

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-29
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多