Je ne suis pas le seul à ne pas savoir utiliser les types Datetime
avec GraphQL-Ruby: https://github.com/rmosolgo/graphql-Ruby-demo/issues/27 , comme vous pouvez le voir il y a 18 personnes comme moi.
Comment puis-je utiliser Date/heure pour certains champs comme celui-ci?
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
Peut-être que je dois utiliser ceci ( 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
Quelqu'un peut-il mieux l'expliquer?
GraphQL::Types::ISO8601DateTime
a récemment été ajouté à graphql-Ruby.
Exemple d'utilisation: field :created_at, GraphQL::Types::ISO8601DateTime, null: false
La déclaration de type devrait fonctionner correctement. Gardez à l'esprit que le type DateTime que vous avez collé se trouve dans le module "Types". Utilisez-le comme ceci:
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
Selon code source , il n'y a que 5 types (Int, String, Float, Boolean, ID) définis en tant que méthode, ce qui signifie que vous ne pouvez pas utiliser types.DateTime
.
Pour personnaliser DateTimeType, vous pouvez référencer son document de la pierre précieuse et l'implémenter comme ci-dessus ( date_time_type.rb ), puis l'utiliser comme suit:
field :birth_date, Types::DateTimeType
Pas sûr d'avoir une meilleure explication, mais j'ai réussi à le faire en collant le code ci-dessus pour définir ma propre variable scalaire 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