Определить вложенный объект GraphQL в Ruby - PullRequest
0 голосов
/ 29 июня 2018

В Ruby я могу определить объект GraphQL с полями

GraphqlObjectType = GraphQL::ObjectType.define do
  field :metadata
end

Но как мне создать многоуровневый вложенный объект GraphQL?

Я не уверен, как интерпретировать документацию Как определяется types[PersonType]?

Мне нравится заканчивать со структурой

metadata: {
    form_issues: {
        person: {
        ...
        }
    }
}

Где / как определить вложенные преобразователи?

GraphqlObjectType = GraphQL::ObjectType.define(name: "GraphqlObjectType") do
  field :metadata, MetadataType
end

MetadataType = GraphQL::ObjectType.define(name: "MetadataType") do
  field :form_issues, FormIssuesType
end

FormIssuesType = GraphQL::ObjectType.define(name: "FormIssuesType") do
  field :person, PersonType
end

PersonType = GraphQL::ObjectType.define(name: "PersonType") do
  field :dob, GraphQL::STRING_TYPE
end

# do you define the leaf node resolver
def dob 
  '01/01/1999'
end

# or the root node resolver
def metadata 
  {
    metadata: {
      form_issues: {
        person: {
          dob: '01/01/1999'
        }
      }
    }
  }
end

1 Ответ

0 голосов
/ 29 июня 2018
 field :director, PersonType
  field :cast, CastType
  field :starring, types[PersonType] do
    argument :limit, types.Int
    resolve ->(object, args, ctx) {
      stars = object.cast.stars
      args[:limit] && stars = stars.limit(args[:limit])
      stars
    }
   end

Если вы определили PersonType, field :director, PersonType относится к одному экземпляру этого типа. И field :starring, types[PersonType] означает «массив из PersonType». Это просто способ выражения этого выражения в graphql-ruby, аналогичный !, что означает «обязательный / ненулевой».

PersonType # => person, can be null.
!PersonType # non-null person.
types[PersonType] # array of people, can be null itself, the array. People inside can be null too.
!types[PersonType] # array can't be null, but can contain nulls.
!types[!PersonType] # array can't be null and can't contain nulls.

Итак, ваша схема может выглядеть примерно так:

field :metadata, MetadataType

# MetadataType
field :form_issues, FormIssuesType # why is this not an array, as the name suggests?
# field :form_issues, types[FormIssueType] # use this for an array

# FormIssuesType / FormIssueType
field :person, PersonType

Примените модификатор "не ноль", где это необходимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...