在我正在工作的网站上,我们使用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轻松进行,但这几乎是不可能的?我不知道怎么了。