我试图在graphql-ruby中实现两个突变 - 一个用于创建资源,另一个用于编辑。在大多数情况下,它们都从客户端获取完全相同的参数,因此我希望避免重复突变并尝试在可重用的类/模块中指定参数。
我使用的是graphql-ruby 1.8和基于新类的API,并且已经开始使用:
class Mutations::ApplicationMutation < GraphQL::Schema::Mutation
... common to every mutation ...
end
class Mutations::CreateResourceMutation < Mutations::ApplicationMutation
argument :name, String, required: true
argument :description, String
argument :create_only_field, String
end
class Mutations::UpdateResourceMutation < Mutations::ApplicationMutation
argument :name, String, required: true
argument :description, String
argument :update_only_field, String
end
在此基本示例中,两个突变中的name
和description
属性相同。我已经将解析器提取到另一个类中,以便可重用,但我不确定解决这些争论的最佳方法。
我认为ActiveSupport :: Concern会起作用,但它感觉不对或我认为它应该对此有用,但我对GraphQL一般都是新手,所以不知道。
答案 0 :(得分:0)
我可以建议一个很好的解决方案,创建一个复杂的参数并在两个突变中使用。 这是代码
# graphql/inputs/resource_input.rb
Inputs::ResourceInput = GraphQL::InputObjectType.define do
name 'ResourceInput'
description 'An input object representing arguments for a user'
argument :name, String, required: true
argument :description, String
argument :create_only_field, String
argument :update_only_field, String
end
在突变中,您可以使用
argument :resourceInput, Inputs::ResourceInput, "the resource complex input"
希望这将帮助您避免受骗