Как правильно сделать отношение «многие ко многим» в graphql- ruby - PullRequest
0 голосов
/ 16 апреля 2020

Итак, у меня есть проект rails, который функционирует как сервер для предоставления API GraphQL. Моя ситуация такова, что у меня есть связь между заказами и продуктами. как в заказе есть несколько товаров, так и товары могут быть в разных заказах, поэтому я настроил их с has_many и и belongs_to друг другу в их моделях. У меня также есть стол соединения, и он, кажется, работает должным образом на стороне рельсов.

Моя проблема в том, что когда я хочу добавить или прочитать это graphQL, я хочу делать запросы примерно так:

mutation {
  createOrder(
    organizationId: 1
    userId: 2
    paymentType: "Cash"
    products: [
      {id: 1}, {id: 2} 
    ]

  ) {
    order {
      id
      createdAt
    }
    errors
  }
}

, но что-то определенно не так. my CreateOrder выглядит так:

class Mutations::CreateOrder < Mutations::BaseMutation
    argument :organization_id,  Integer,                    required: true
    argument :user_id,          Integer,                    required: true
    argument :paid,             Integer,                    required: false
    argument :payment_type,     String,                     required: true
    argument :status,           String,                     required: false
    argument :products,         [Types::ProductInputType],  required: true


    field :order,       Types::OrderType,      null: false
    field :errors,      [String],              null: true

    def resolve(**attributes)
        order = Order.new(attributes)

        if order.save
            {
                order: order,
                errors: []
            }
        else
            {
                order: nil,
                errors: order.errors.full_messages
            }
        end
    end
end

Сначала я пытался указать :products как ProductType в моей мутации CreateOrder, но решил, что вместо этого мне нужен тип ввода, который я сделанный так:

module Types
    class ProductInputType < Types::BaseInputObject
        argument :id,                   Integer,    required: true
        argument :name,                 String,     required: false
        argument :organization_id,      Integer,    required: false
        argument :description,          String,     required: false
        argument :inventory,            Integer,    required: false
        argument :images,               String,     required: false
        argument :price,                Float,      required: false

        # type Types::ProductType
    end 
end

На данный момент я весь день с этой проблемой сижу и у меня остроумие, документация, которую я считаю недостаточной, старая или, по крайней мере, я не Я не понимаю это полностью. Поэтому я не уверен, правильно ли я задаю вопрос.

Надеюсь, кто-нибудь придет и поможет :)

С наилучшими пожеланиями

...