17

我不是唯一一个不知道如何在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

也许我必须使用这个(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

有人可以更好地解释吗?

4

4 回答 4

28

GraphQL::Types::ISO8601DateTime最近被添加到GraphQL::Types::ISO8601Dategraphql ruby​​ 库(Pull Request)。

使用示例:

field :created_at, GraphQL::Types::ISO8601DateTime, null: false
field :starts_on, GraphQL::Types::ISO8601Date, null: false
于 2018-07-22T16:14:45.037 回答
2

类型声明应该正常工作。请记住,您粘贴的 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
于 2018-02-01T13:27:21.843 回答
1

根据源代码,只有 5 种类型(Int、String、Float、Boolean、ID)定义为方法,这意味着您不能使用types.DateTime

要自定义 DateTimeType,您可以参考它的 gem文档并按照上面提到的(date_time_type.rb)实现,然后您可以像这样使用它:

field :birth_date, Types::DateTimeType

于 2018-02-08T01:58:37.430 回答
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
于 2018-01-05T10:20:14.807 回答