首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Graphql-Ruby:创建对象可以从

Graphql-Ruby:创建对象可以从
EN

Stack Overflow用户
提问于 2021-10-25 21:37:12
回答 2查看 793关注 0票数 1
代码语言:javascript
复制
    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),我可以这样查询:

代码语言:javascript
复制
    query {
            someProgram(id: 1) {
               name
               type
               description
            }
}

但是我遇到了石墨化的错误,比如“字段名”在‘SomeProgram’类型中不存在。我遗漏了什么?

更新:

我的QueryType课程:

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-10-28 20:02:56

我解决了这个问题。我用implements Types:SomeProgram代替了implements Types::SomeProgram。我漏掉了一个结肠。

票数 0
EN

Stack Overflow用户

发布于 2021-10-26 23:38:50

您还能分享如何在查询类型中公开someProgram吗?

如果您使用的是GraphiQL应用程序,您也可以通过查看模式来调试这一点。您可以看到someProgram的返回类型,它应该是ProgramType类型。

您还可以更新查询以包含__typename,因此可以从

代码语言:javascript
复制
query {
   someProgram(id: 1) {
       __typename
   }
}

首先查看返回类型是什么,以及它是否在resolve_type中被正确处理

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69715042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档