常见的参数graphQL

时间:2018-06-18 18:36:34

标签: ruby-on-rails-3 graphql

我试图在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

在此基本示例中,两个突变中的namedescription属性相同。我已经将解析器提取到另一个类中,以便可重用,但我不确定解决这些争论的最佳方法。

我认为ActiveSupport :: Concern会起作用,但它感觉不对或我认为它应该对此有用,但我对GraphQL一般都是新手,所以不知道。

1 个答案:

答案 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"

希望这将帮助您避免受骗