Я пытаюсь реализовать две мутации в 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 в целом, поэтому понятия не имею.





Я могу предложить хорошее решение, создающее сложный аргумент и использующее две мутации. Вот код
# 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"
Надеюсь, это поможет вам избежать обманов
Извините, я полностью это пропустил. Именно то, чем я закончил :)