💘
GraphQL ruby でEnumの命名を〇〇_Typeにする
この記事は以下のページに移動しました。
GraphQLではEnumを定義できて、以下のように書きます。
(ファイルの置き場所を変えてるのでファイルパスとモジュール名は読み替えてください)
app/graphql/types/enums/sort_type.rb
class Types::Enums::SortType < Types::BaseEnum
value 'ASC', value: :asc
value 'DESC', value: :desc
end
このEnumは以下のように使えます。
app/graphql/types/query_type.rb
module Types
class QueryType < Types::BaseObject
# 省略
field :posts, Types::Objects::PostType.connection_type, null: false do
argument :sort, Types::Enums::SortType, required: false, default_value: :desc
end
def posts(sort:)
Post.order(id: sort)
end
end
end
一見これで完了したように思えますが、意図した挙動はしません。
schema.json
{
"kind": "ENUM",
"name": "Sort",
...
},
nameがSortになってしまっていて、クラス名につけた_Type
が削除されてます。
Enumの名前をクラス名とは別に設定する
graphql_name
を指定することで実現できます。
app/graphql/types/enums/sort_type.rb
class Types::Enums::SortType < Types::BaseEnum
+ graphql_name 'SortType'
+
value 'ASC', value: :asc
value 'DESC', value: :desc
end
bundle exec rails graphql:schema:json
でGraphQLスキーマファイルを再度確認してみると、nameがちゃんとSortType
になってるのが確認できます。
schema.json
{
"kind": "ENUM",
"name": "SortType",
...
},
Discussion