module Types::ProgramType
include Types::BaseInterface
description "Objects which inherit from Program"
graphql_name "Program"
orphan_types Types::SomeProgramType, Types::AnotherProgramType, Types::ThirdProgramType
field :id, ID, null: false
field :type, Integer, null: false
field :name, String, null: false
definition_methods do
def self.resolve_type(object, _context)
case object.class
when SomeProgram then SomeProgramType
when AnotherProgram then AnotherProgramType
when ThirdProgram then ThirdProgramType
else
raise "Unknown program type"
end
end
end
end
module Types
class SomeProgramType < Types::BaseObject
implements Types:ProgramType
field :description, String, null: false
end
end我还在SomeProgram文件中添加了对query_type类型的查询。我的印象是,在对象类型中添加"implement“,将允许它们从接口继承字段(按照这个链接:https://graphql-ruby.org/type_definitions/interfaces),我可以这样查询:
query {
someProgram(id: 1) {
name
type
description
}
}但是我遇到了石墨化的错误,比如“字段名”在‘SomeProgram’类型中不存在。我遗漏了什么?
更新:
我的QueryType课程:
class QueryType < Types::BaseObject
# Add `node(id: ID!) and `nodes(ids: [ID!]!)`
include GraphQL::Types::Relay::HasNodeField
include GraphQL::Types::Relay::HasNodesField
field :some_programs, [SomeProgramType], null: false,
description: "all some programs"
def some_programs
SomeProgram.all
end
field :some_program, SomeProgramType, null: false do
argument :id, ID, required: true
end
def some_program(id:)
SomeProgram.find(id)
end
end发布于 2021-10-28 20:02:56
我解决了这个问题。我用implements Types:SomeProgram代替了implements Types::SomeProgram。我漏掉了一个结肠。
发布于 2021-10-26 23:38:50
您还能分享如何在查询类型中公开someProgram吗?
如果您使用的是GraphiQL应用程序,您也可以通过查看模式来调试这一点。您可以看到someProgram的返回类型,它应该是ProgramType类型。
您还可以更新查询以包含__typename,因此可以从
query {
someProgram(id: 1) {
__typename
}
}首先查看返回类型是什么,以及它是否在resolve_type中被正确处理
https://stackoverflow.com/questions/69715042
复制相似问题