Я пытаюсь перейти от использования REST API Rails к использованию 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
, но я хочу, чтобы он возвращал либологическое значение или строка. Даже если я скопирую / вставлю код из сериализатора в определение типа, он все равно вернет только строку