【发布时间】:2020-03-05 13:02:43
【问题描述】:
我正在尝试从使用 Rails REST API 迁移到使用 GraphQL。我们尝试替换的 REST 端点之一使用了序列化程序。在该序列化程序中,我们返回一个字符串或一个布尔值,具体取决于字符串是“true”还是“false”。我无法创建可以处理此问题的 graphql 对象。我尝试创建自定义类型和自定义标量无济于事。我正在尝试使用 rspec 来测试 graphql 查询,但是当我尝试使用自定义标量或自定义类型时,我不断收到运行时错误消息:
no implicit conversion of nil into String
没有用的部分是我没有很好的方法来调试导致此错误的原因。
- 是否有一种简单的方法来定义将返回布尔值或字符串的 graphQL 字段?
- 有人对如何调试我通过 rspec 得到的错误有任何建议吗?我尝试在不同的地方使用
byebug,但byebug语句永远不会受到打击。
这是我尝试转换为 graphql 的序列化程序示例
class ModelToSerialize < ActiveModel::Serializer
attributes :id, :customization_key, :value
# value is stored as a string in the relational database
# customization_key is stored as an integer in the relational database
def value
if object.customization_key == 1
return true if object.value == true || object.value =~ /^(true|t|yes|y|1)$/i
return false
else
object.value
end
end
end
这是我尝试创建的 GraphQL 类型:
module Types
class ModelToSerializeType < Types::BaseObject
field :id, Int, null: false
field :value, String, null: false # this should return boolean OR string
field :customization_key, Int, null: false, camelize: false
end
end
上述方法不起作用,因为我将类型限制为String,但我希望它返回布尔值或字符串。即使我将序列化程序中的代码复制/粘贴到类型定义中,它仍然只会返回一个字符串
【问题讨论】:
-
更新为包含序列化代码
-
你必须提供一个更好的代码示例,显示你有什么,错误是什么,错误的堆栈跟踪,你做了什么来尝试转换它,等等。引导我们问题。不要给出笼统的问题描述并说“我已尝试解决问题,但无法告诉您我遇到问题的方式或位置。”
-
听起来这可能是使用联合的情况。 graphql-ruby.org/type_definitions/unions.html
标签: ruby-on-rails ruby graphql