GraphQL-Ruby:执行突变时,出现错误 Variable $...... is declared by ....(mutation).... but not used

GraphQL-Ruby : When executing a mutation, get error Variable $...... is declared by ....(mutation).... but not used

我正在这里学习 GraphQL ruby,这看起来应该是基本的,但文档使它很难理解。我哪里错了?

我的目标只是在我的 Ruby 应用程序中进行 GraphQL 更改。

app/graphql/types/mutation_type.rb

module Types
  class MutationType < Types::BaseObject

    field :name, String

    field :create_trip, mutation: Mutations::CreateTrip
  end
end

这是在 app/graphql/mutations/create_trip.rb

class Mutations::CreateTrip < Mutations::BaseMutation
  null true
  argument :leavingFrom, String

  field :name, String

  type Types::TripType

  def resolve(leavingFrom: )
    new_trip = Trip.create(leavingFrom: leavingFrom)

    # this doesn't really do anything--- this is proof-of-concept code only
    if new_trip.save
      # Successful creation, return the created object with no errors
      {
        trip: trip,
        errors: [],
      }
    else
      # Failed save, return the errors to the client
      {
        trip: nil,
        errors: trip.errors.full_messages
      }
    end
  end
end

app/graphql/types/trip_type.rb

# frozen_string_literal: true

module Types
  class TripType < Types::BaseObject
    field :id, ID, null: false
    field :traveling_party_id, Integer
    field :name, String
  end
end

当我运行这个突变时:

mutation CreateTrip($leavingFrom: String) {
  name
}

(有一些离开的数据)

我得到了这个意想不到的结果:“变量 $leavingFrom 由 CreateTrip 声明但未使用”

预期结果:我的突变调用解决了我的 GraphQL 突变。

我认为问题出在我的查询中,因为它看起来不像曾经调用过的 Ruby 代码。与消息本身相反, leavingFrom 确实被 resolve body 中的 mutation 使用。

mutation CreateTrip($leavingFrom: String) {
  CreateTrip(leavingFrom: $leavingFrom) {
    name
  }
}

给出的答案 完全正确。

以更解释性的方式,当您执行查询或变更(操作类型)时,您可以命名或不命名您的操作。

<operation_type> <operation_name(optional)> (<variables>) {
  # your query or mutation
}

# without naming it
mutation($input: String) {
  # your mutation
}

# naming it 
mutation MyMutation($input: String) {
  # your mutation
}

此外,我个人总是使用驼峰式命名我的 mutations/queries 并在 mutation/query 和操作名称之间使用不同的名称,使用您的示例,我会这样做:

mutation CreateTripMutation($leavingFrom: String) {
  createTrip(leavingFrom: $leavingFrom) {
    name
  },
}

希望对你有所帮助