graphql-rubyのmutationの例外処理でActiveRecordのerrorsを利用する
はじめに
graphql-rubyでmutationを行うとき、ActiveModel::ValidationErrorが発生した場合に、これをフォーム側(フロント)で表示したい、といった要望は割とよくあると思います。この辺りのエラーハンドリングに関するお話です。
取り分けフロントとバックエンド、それぞれを異なる外部ベンダーに依頼しており、E2Eテストの網羅性が低い場合などは、バリデーションの相違に起因するエラーが結構な頻度で起こるのではないでしょうか。
実装
そういった際には、GraphQL::ObjectType.defineにおいて、ActiveModel#Errorsをfieldに指定するのが良いそうです。
参考:https://github.com/rmosolgo/graphql-ruby/blob/master/guides/queries/error_handling.md
ちなみにこの際ですが、Graphql::Relayを利用していると、createが失敗したことでUser#idが存在しない場合に、例外が発生します。わたくしは取り急ぎ、適当な文字列を入れ込んで対応いたしました。