我目前正在尝试学习GraphQL,但是遇到了问题。问题可能是无法理解编写我的类型的正确方法。当我的用户类型为
module Types
UserType = GraphQL::ObjectType.define do
name 'User'
field :id, !types.ID
field :username, !types.String
field :email, !types.String, property: :email_address
field :workspaces, types[Types::WorkspaceType]
end
end
我可以毫无问题地返回一组工作空间。现在,当我尝试返回与该工作空间关联的用户数组时,问题就来了。我的工作空间类型看起来像这样
class Types::WorkspaceType < Types::BaseObject
field :id, ID, null: false
field :user_id, ID, null: false
field :name, String, null: false
field :members, types[Types::UserType]
end
当我尝试在获取工作空间时运行查询时,出现错误消息
"error": {
"message": "undefined local variable or method `types' for Types::UserType:Class",
我正在使用的后端是Ruby on Rails。对于那些对GraphQL有一定经验的人,我很乐意在我做错事情以及在每个模型之间连接类型的正确方法方面提供反馈。如果您需要其他任何信息或需要澄清的信息,请随时询问。
谢谢。
答案 0 :(得分:1)
graphql gem有two different "styles"使用Ruby DSL声明GraphQL对象(它也可以直接导入GraphQL模式语言)。较旧的样式(现已从文档中删除)使用GraphQL::ObjectType.define
,并且需要使用types
语法限定大多数引用。 The newer style uses Ruby class inheritance,并且不使用types
。
简而言之:我认为只要将最后一个字段定义更改为
,您的代码就可以使用field :members, [Types::UserType]