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
},
}
希望对你有所帮助
我正在这里学习 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 代码。与消息本身相反,
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
},
}
希望对你有所帮助