如何处理可能返回graphql中几种标量类型之一的字段

如何处理可能返回graphql中几种标量类型之一的字段,graphql,graphql-ruby,Graphql,Graphql Ruby,在graphql(使用优秀的graphql ruby gem)中,我试图返回一个对象,该对象的字段可以等于布尔值、整数或字符串。我最初的想法是返回布尔、整数或字符串的并集,但graphql ruby告诉我并集不能包含标量类型(我认为这是规范施加的约束,而不是graphql ruby) 我能想到的解决方案(不是很好)是将值作为json字符串返回,并在客户端对其进行解析。有没有更好的方法来处理可能是几个标量之一的返回值 谢谢 我已经能够通过创建graphql自定义标量类型来实现这一点,该类型只需检查

在graphql(使用优秀的graphql ruby gem)中,我试图返回一个对象,该对象的字段可以等于布尔值、整数或字符串。我最初的想法是返回布尔、整数或字符串的并集,但graphql ruby告诉我并集不能包含标量类型(我认为这是规范施加的约束,而不是graphql ruby)

我能想到的解决方案(不是很好)是将值作为json字符串返回,并在客户端对其进行解析。有没有更好的方法来处理可能是几个标量之一的返回值


谢谢

我已经能够通过创建graphql自定义标量类型来实现这一点,该类型只需检查以确保值是布尔值、整数或字符串,如果是,则返回该值不变。否则,将返回一个错误。此解决方案不需要在客户端进行任何额外的解析

在graphql ruby中,实现如下所示

GraphScalar::AnyPrimative = GraphQL::ScalarType.define do
  name "AnyPrimativeScalar"

  coerce_input ->(value, ctx) { 
    case value
    when String, TrueClass, FalseClass, Integer, Float then value
    else
      GraphQL::ExecutionError.new("Invalid value type: #{value.class.name}")
    end
  }

  coerce_result ->(value, ctx) { 
    case value
    when String, TrueClass, FalseClass, Integer, Float then value
    else
      GraphQL::ExecutionError.new("Invalid value type: #{value.class.name}")
    end
  }
end

注意:这个实现实际上也允许浮动

有人用1.9成功地做到了这一点吗?一直在尝试使用新的语法,但无法实现此目的work@Dennis此链接显示如何在GraphQL Ruby的现代版本中执行此操作: