Возврат массива graphQL

В настоящее время я пытаюсь изучить 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, я хотел бы получить отзывы о том, что я делаю неправильно, а также о том, как правильно соединять типы между каждой моделью. Если вам потребуется дополнительная информация или вы хотите получить разъяснения, не стесняйтесь спрашивать.

Спасибо.

Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Шаг 1: Создание приложения Slack Чтобы создать Slackbot, вам необходимо создать приложение Slack. Войдите в свою учетную запись Slack и перейдите на...
2
0
808
1

Ответы 1

gem-пакет graphql имеет два разных «стиля» объявления объектов GraphQL с использованием Ruby DSL (и он также может напрямую импортировать язык схемы GraphQL). В более старом стиле (который сейчас исключен из документации) используется GraphQL::ObjectType.define, и большинство ссылок необходимо квалифицировать с помощью синтаксиса types. В новом стиле используется наследование классов Ruby. и не использует types.

Вкратце: я думаю, ваш код будет работать, если вы просто измените последнее определение поля на

field :members, [Types::UserType]

Другие вопросы по теме