AbU*_*dZu 4 ruby ruby-on-rails graphql
我正在尝试使用 RoR 在 Graphql 中编写我的第一个突变。看起来像这样:
应用程序/graphql/mutations/create_post.rb
module Mutations
class CreatePost < Mutations::BaseMutation
argument :title, String, required: true
argument :body, String, required: true
type Types::PostType
def resolve(title: nil, body: nil)
Post.create!(title: title, body: body)
end
end
end
Run Code Online (Sandbox Code Playgroud)
但是每次我使用Graphiql提出请求时(像这样:)
mutation createPost {
createPost(input:{
title:"dupa",
body:"dupa"
}) {
id
}
}
Run Code Online (Sandbox Code Playgroud)
帖子被保存在数据库中,但我收到一个错误
"error": {
"message": "can't write unknown attribute `client_mutation_id`" [...]
Run Code Online (Sandbox Code Playgroud)
而不是请求的 id 我该如何解决这个问题?这是我的
应用程序/graphql/mutations/base_mutation.rb
module Mutations
class BaseMutation < GraphQL::Schema::RelayClassicMutation
end
end
Run Code Online (Sandbox Code Playgroud)
应用程序/graphql/types/mutation_type.rb
module Types
class MutationType < Types::BaseObject
field :create_post, mutation: Mutations::CreatePost
end
end
Run Code Online (Sandbox Code Playgroud)
github 链接是否有帮助:https : //github.com/giraffecms/GiraffeCMS-backend-rails/tree/blog/app/graphql
该继电器输入对象的突变规范规定了什么突变投入和产出的样子,有的要求graphql,红宝石会产生一些这方面的样板给你。特别是,您没有直接指定type突变响应的 graphql-ruby 为您生成“有效负载”类型,您必须指定field进入其中的s。
也就是说,我认为应该这样说:
class Mutations::CreatePost < Mutations::BaseMutation
argument :title, String, required: true
argument :body, String, required: true
field :post, Types::PostType, null: false
def resolve(title: nil, body: nil)
post = Post.create!(title: title, body: body)
{ post: post }
end
end
Run Code Online (Sandbox Code Playgroud)
API 文档说明(强调来自原文):
所谓的争论
clientMutationId是一直增加,但它不是传递给方法的决心。该值被重新插入到响应中。(用于客户端库管理乐观更新。)
因此,当您的原始版本尝试直接返回模型对象时,graphql-ruby 会尝试对其进行设置#client_mutation_id,这会导致您收到错误。