如何正确地将数组数组或哈希数组转换为GraphQL对象?

时间:2019-07-11 02:36:39

标签: ruby-on-rails ruby graphql

在我正在工作的网站上,我们使用GraphQL将信息从后端中继到前端,反之亦然。现有代码中有很多是遗留代码,所以我自己没有写过,但是我一直在寻找如何拼凑如何创建我想要制作的新对象的方法。 我们正在尝试根据结果制作一个词频表,以中继到前端以自动完成。因此,基本上只是单词到单词计数的巨大哈希图。该哈希图已经创建并可以使用,但是现在将其挂接到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轻松进行,但这几乎是不可能的?我不知道怎么了。

0 个答案:

没有答案