не может написать неизвестный атрибут `client_mutation_id` - PullRequest
0 голосов
/ 05 февраля 2019

Я пытаюсь написать свою первую мутацию в Graphql с RoR.Это выглядит так:

app / 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

Но каждый раз, когда я делаю запрос с использованием Graphiql (например:)

mutation createPost {
  createPost(input:{
    title:"dupa",
    body:"dupa"
  }) {
    id
  }
}

Сообщение сохраняется в базе данных, но я получаю сообщение об ошибке

"error": {
    "message": "can't write unknown attribute `client_mutation_id`" [...]

вместо запрошенного идентификатора. Как я могу решить эту проблему?это моя

app / graphql / mutations / base_mutation.rb

module Mutations
    class BaseMutation < GraphQL::Schema::RelayClassicMutation
    end
end

app / graphql / types / mutation_type.rb

module Types
  class MutationType < Types::BaseObject
    field :create_post, mutation: Mutations::CreatePost
  end
end

github ссылка, если она можетпомощь: https://github.com/giraffecms/GiraffeCMS-backend-rails/tree/blog/app/graphql

1 Ответ

0 голосов
/ 05 февраля 2019

Спецификация релейных входных объектов устанавливает некоторые требования к тому, как выглядят входы и выходы мутаций, и graphql-ruby может сгенерировать некоторые из этих шаблонов для вас .В частности, вы непосредственно не указываете 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

Примечание по API (выделено из оригинала):

Аргумент с именем clientMutationId всегда добавляет , но не передаетсяразрешить метод.Значение повторно вставляется в ответ.(Клиентские библиотеки управляют оптимистичными обновлениями.)

Поэтому, когда ваша исходная версия пытается напрямую вернуть объект модели, graphql-ruby пытается установить на него #client_mutation_id, и это приводит кошибка, которую вы получаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...