如何从GraphQL突变返回Union类型

时间:2020-01-02 11:19:40

标签: graphql-ruby

我想使用此模式从GraphQL Ruby返回验证失败:https://medium.com/@sachee/200-ok-error-handling-in-graphql-7ec869aec9bc

从我的突变中,我希望能够返回这样的并集的有效载荷:

    class RegistrationPayloadType < Base::Union
      possible_types UserType, ValidationFailureType

      def self.resolve_type(object, context)
        if context.current_user.present?
          UserType
        else
          ValidationFailureType
        end
      end
    end

我在突变中的解决方法是这样的

      def resolve(input:)
        @input = input.to_h

        if registration.save
          candidate
        else
          registration.errors
        end
      end

然后客户可以这样调用突变;

  mutation UserRegistrationMutation($input: UserRegistrationInput!) {
    userRegistration(input: $input) {
      __typename
      ... on User {
        id
      }
      ... on ValidationFailure {
        path
        message
      }
    }
  }

如何在GraphQL-ruby中返回联合作为有效载荷?

2 个答案:

答案 0 :(得分:0)

答案实际上非常简单。如果您想从突变中返回其他类型,就我而言,就是上面的RegistrationPayloadType。

    class RegistrationMutation < Base::Mutation
      argument :input, Inputs::RegistrationInputType, required: true

      payload_type RegistrationPayloadType

      ...
    end

使用payload_type类方法可以得到所需的信息。

答案 1 :(得分:0)

此博客(https://www.abhaynikam.me/posts/polymorphic-types-with-graphql-ruby/)介绍了如何在GraphQL-ruby中将联合类型用于多态类型。在这里,不是使用payload_type而是返回另一个字段Type来解析联合类型。