graphql-ruby,日期或日期时间类型

12 ruby datetime ruby-on-rails graphql graphql-ruby

我不是唯一一个不知道如何使用DatetimeGraphQL-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
Run Code Online (Sandbox Code Playgroud)

也许我必须使用它(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
Run Code Online (Sandbox Code Playgroud)

有人能更好地解释一下吗?

dos*_*stu 16

GraphQL::Types::ISO8601DateTime 最近被添加到graphql-ruby.

用法示例: field :created_at, GraphQL::Types::ISO8601DateTime, null: false


nie*_*bot 0

不确定我有更好的解释,但我确实通过粘贴上面的代码来定义我自己的标量来使其工作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
Run Code Online (Sandbox Code Playgroud)