Как правильно преобразовать массив массивов или массив хешей в объект GraphQL? - PullRequest
0 голосов
/ 11 июля 2019

На нашем веб-сайте, над которым я работаю, мы используем GraphQL для передачи информации из бэкэнда во внешний интерфейс и наоборот. Большая часть существующего кода является устаревшим кодом, поэтому я сам не написал его, но я искал, пытаясь собрать воедино, как создать этот новый объект, который я хочу создать. Мы пытаемся составить частотно-частотную таблицу из наших результатов для ретрансляции во внешний интерфейс для автозаполнения. Так что, в основном, это просто огромная таблица слов. Этот hashmap уже создан и работает, но теперь у меня проблемы с подключением к GraphQL.

Это то, что я имею до сих пор:

module Types
  class AutoSuggestType < Types::BaseObject
    description "A list of suggested words"
    field :words, [SuggestionType], "List of autosuggested words", null: false

    def words
      autosuggest = AutosuggestService.new
      autosuggest.suggestions
    end
  end
end
module Types
  class SuggestionType < Types::BaseObject
    description "A suggestion"
    field :word, String, "Word", null: false
    field :frequency, Integer, "Word count of the word", null: false
  end
end
require 'autosuggest'

class AutosuggestService
  def initialize
    # we might have to limit this to prefix matched words because right now we're just sending all the data to
    # the front end
    top_queries = Hash[WordFrequency.pluck(:name, :frequency)]
    @autosuggest = Autosuggest.new(top_queries)
  end

  def words
    result = []
    @autosuggest.suggestions.each do |suggestion|
      unless suggestion.nil?
        result.push Hash[suggestion[:query], suggestion[:score]]
      end
    end
    result
  end
  end
end

По сути, всякий раз, когда я запускаю соответствующую команду GraphQL, он говорит, что возвращает нулевой объект. Но объекты создаются должным образом, я думаю, потому что, когда я делаю puts, он показывает правильные вещи.

Не похоже, что с другими сервисами в этом проекте они создаются явно. Но это намного проще, поэтому я не знаю. Каков наилучший способ сделать это в целом? Если моя текущая идея в порядке, как мне сделать создание массива?

Редактировать: я пытался сделать что-то вроде этого безрезультатно:

result.push [Hash[:word, suggestion[:query]], Hash[:frequency, suggestion[:score]]]

Есть ли причина, по которой переход от ActiveRecord к GraphQL безболезнен, но это почти невозможно? Я не знаю, что случилось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...