Динамическое c постоянное назначение при использовании Graphql для Shopify API - PullRequest
1 голос
/ 02 марта 2020

Я использую Graphql в Shopify API, а также мне нужно использовать переменные в моем запросе. Я нашел этот пост, но он не работал, потому что я использую эти переменные запроса.

Это именно та ошибка, которую я получаю:

SyntaxError (/home/fc-gui/app/controllers/concerns/product_graphql.rb:26: dynamic constant assignment
FIRST_PRODUCTS = CLIENT.parse <<-'GRAPHQL'

А затем вот метод, в котором я пытаюсь выполнить свой запрос

  def run_first_query
    FIRST_PRODUCTS = CLIENT.parse <<-'GRAPHQL'
    query($first: Int){
      products(first: $first) {
        pageInfo {
          hasNextPage
        }
        edges {
          cursor
          node {
            id
            title
            featuredImage {
              originalSrc
            }
          }
        }
      }
    }
    GRAPHQL
    first = { "first": number_of_products_to_return}
    @query_result = CLIENT.query(FIRST_PRODUCTS, variables: first)
    get_last_cursor
  end

Я пытался создать клиент, похожий на вышеупомянутый пост, как эти два варианта, но не повезло:

CLIENT = ShopifyAPI::GraphQL.new
##
def graphql_client
  ShopifyAPI::GraphQL.new
end

Кто-нибудь может запускать запросы graphql с переменными в Ruby и НЕ получать эту ошибку?

1 Ответ

1 голос
/ 03 марта 2020

А вот и решение. Очень трудно поверить, что это «новый» способ доступа к данным через API. Это медленнее, сложнее и многословнее. Я не получаю выгоду вообще.

  def run_first_query
    query = <<-'GRAPHQL'
    query($first: Int){
      products(first: $first) {
        pageInfo {
          hasNextPage
        }
        edges {
          cursor
          node {
            id
            title
            featuredImage {
              originalSrc
            }
          }
        }
      }
    }
    GRAPHQL
    first = { 
      "first": number_of_products_to_return,
    }
    Kernel.const_set(:ProductQuery, graphql_client.parse(query))
    @query_result = graphql_client.query(ProductQuery, variables: first)
  end
...