为什么graphql-ruby的布尔类型在null值上不返回false

时间:2017-10-12 14:20:21

标签: ruby-on-rails ruby graphql graphql-ruby

在graphql-ruby repo中,布尔类型如下所示:

String classes= getDriver().findElement(someSelector).getAttribute("class");
Optional<String> classFindResult = Arrays.stream(elementClasses.split(" ")).filter(el -> el.equals("myClass")).findFirst();
if(openClassFindResult.isPresent()){
    return true;
}
return false;

但是当我查询一个从数据库返回nil的布尔字段时,我得到null。

Note query

在我的笔记类型中,我已将graphql字段与我在数据库中的布尔属性直接耦合。

GraphQL::BOOLEAN_TYPE = GraphQL::ScalarType.define do
  name "Boolean"
  description "Represents `true` or `false` values."

  coerce_input ->(value, _ctx) { (value == true || value == false) ? value : nil }
  coerce_result ->(value, _ctx) { !!value }
  default_scalar true
end

有人可以解释一下这个问题并提出一个不涉及改变所有领域的解决方案吗?

1 个答案:

答案 0 :(得分:0)

默认GraphQL::BOOLEAN_TYPE每当给出非布尔值时返回nil,如下所示:https://github.com/rmosolgo/graphql-ruby/blob/7f7e97cc2902046d485adcb6e8e6a5eb462b3faf/spec/graphql/boolean_type_spec.rb

所以这里可能会发生的事情是types.Boolean仍然映射到旧的GraphQL::BOOLEAN_TYPE,而不是使用新的覆盖。