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
我還在 query_type 檔案中添加了對 SomeProgram 型別的查詢。我的印象是,向物件型別添加“實作”,將允許他們從介面繼承欄位(每個鏈接:https : //graphql-ruby.org/type_definitions/interfaces),我將能夠像這樣查詢:
query {
someProgram(id: 1) {
name
type
description
}
}
但是我在 graphiql 中遇到錯誤,例如“型別 'SomeProgram' 上不存在欄位 'name'”。我錯過了什么?
更新:
我的 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
uj5u.com熱心網友回復:
您還可以分享您如何someProgram在查詢型別中公開嗎?
如果您使用的是 GraphiQL 應用程式,您還可以通過查看架構來除錯它。你可以看到它的回傳型別someProgram應該是 type of ProgramType。
您還可以更新您的查詢以包含__typename所以也許從
query {
someProgram(id: 1) {
__typename
}
}
首先看看什么是回傳型別以及它是否在 resolve_type
uj5u.com熱心網友回復:
我想通了這個問題。我已經把implements Types:SomeProgram而不是implements Types::SomeProgram. 我少了一個冒號。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/342936.html
標籤:红宝石轨道 红宝石 图形 graphql-ruby
上一篇:按id添加元素時過濾
