web-dev-qa-db-ja.com

graphql-Ruby、DateまたはDatetimeタイプ

GraphQL-RubyでDatetime型を使用する方法を知らないのは私だけではありません。 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

誰かがそれをよりよく説明できますか?

13
user4412054

GraphQL::Types::ISO8601DateTime最近、graphql-Rubyに追加されました。

使用例:field :created_at, GraphQL::Types::ISO8601DateTime, null: false

13
dostu

型宣言は適切に機能するはずです。貼り付けたDateTimeTypeはモジュール「Types」にあることに注意してください。次のように使用します。

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
2
ChrisK

ソースコード によると、メソッドとして定義されているのは5つのタイプ(Int、String、Float、Boolean、ID)だけなので、types.DateTimeは使用できません。

DateTimeTypeをカスタマイズするには、gemの document を参照して、(date_time_type.rb)、その後、次のように使用できます:

field :birth_date, Types::DateTimeType

1
Andy Wang

より良い説明があるかどうかはわかりませんが、上からコードを貼り付けて自分のスカラーを定義することで機能しました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
0
nielsbot