graphql-ruby, тип Date или Datetime

Я не единственный, кто не знает, как использовать Datetime типы в GraphQL-Ruby: https://github.com/rmosolgo/graphql-ruby-demo/issues/27, как видите, таких как я 18 человек.

Как я могу использовать Datetime для таких полей?

Types::PlayerType = GraphQL::ObjectType.define do
  name 'Player'

  field :id, !types.ID
  field :birth_date, types.Datetime #or what?
  field :death_date, !types.Datetime #or what?
  field :note, types.String
end

Возможно, мне придется использовать это (https://github.com/howtographql/graphql-ruby/blob/master/app/graphql/types/date_time_type.rb):

date_time_type.rb:

Types::DateTimeType = GraphQL::ScalarType.define do
  name 'DateTime'

  coerce_input ->(value, _ctx) { Time.zone.parse(value) }
  coerce_result ->(value, _ctx) { value.utc.iso8601 }
end

Может ли кто-нибудь объяснить это лучше?


person Community    schedule 24.12.2017    source источник


Ответы (4)


GraphQL::Types::ISO8601DateTime и GraphQL::Types::ISO8601Date недавно были добавлены в библиотеку ruby ​​graphql (Pull Request).

Пример использования:

field :created_at, GraphQL::Types::ISO8601DateTime, null: false
field :starts_on, GraphQL::Types::ISO8601Date, null: false
person dostu    schedule 22.07.2018

Объявление типа должно работать правильно. Имейте в виду, что вставленный DateTimeType находится в модуле «Типы». Используйте это так:

Types::PlayerType = GraphQL::ObjectType.define do
  name 'Player'

  field :id, !types.ID
  field :birth_date, Types::DateTimeType
  field :death_date, Types::DateTimeType
  field :note, types.String
end
person ChrisK    schedule 01.02.2018


Не уверен, что у меня есть лучшее объяснение, но я заставил его работать, вставив код сверху, чтобы определить свой собственный скаляр DateTimeType:

DateTimeType = GraphQL::ScalarType.define do
  name 'DateTime'

  coerce_input ->(value, _ctx) { Time.zone.parse(value) }
  coerce_result ->(value, _ctx) { value.utc.iso8601 }
end

MyType = ::GraphQL::ObjectType.define do
  name 'MyType'
  field :when, type: !DateTimeType
end
person nielsbot    schedule 05.01.2018