Как правильно обновить модель с помощью graphql-ruby?

Я работаю над дополнительным проектом, чтобы изучить реализацию GraphQL в приложении Rails 6. Для этого я использую graphql-ruby драгоценный камень.

У меня есть метод разрешения для обновления модели Medium, которая выглядит следующим образом:

module Mutations
  module Media
    class UpdateMedia < GraphQL::Schema::Mutation
      include ::GraphqlAuthenticationConcerns
      include ::GraphqlActiveModelConcerns

      description 'Update Media'
      argument :id, Integer, required: true
      argument :title, String, required: false
      argument :preview_url, String, required: false
      argument :preview_image, String, required: false
      argument :watched, Boolean, required: false
      field :success, Boolean, null: false
      field :errors, [Types::ActiveModelError], null: false
      field :media, Types::MediumType, null: false

      def resolve(id:, title:, release_date:, preview_url:, preview_image:, watched:)
        authenticate_user!

        media = Medium.find(id)

        media_params = {
          title: title,
          preview_url: preview_url,
          preview_image: preview_image,
          watched: watched,
        }

        if media.update(media_params)
          success_response(media)
        else
          failed_response(media)
        end
      end

      private

      def success_response(media)
        {
          success: true,
          errors: [],
          media: media
        }
      end

      def failed_response(media)
        {
          success: false,
          errors: errors(media)
        }
      end
    end
  end
end

Если я настроил аргументы таким образом и хочу обновить только поле watched, я получаю ошибку 500 с указанием missing keywords: :title, :release_date, :preview_url, :preview_image.

Я видел Эта проблема в репозитории graphql-ruby от кого-то с той же проблемой, однако им было сказано установить значения по умолчанию для nil, и когда я попробовал это, он, конечно, установил каждый столбец для этой модели равным нулю.

Я хочу иметь возможность изменять только поля, которые фактически передаются в качестве аргументов, не затрагивая другие. Как разрешить использование как обязательного параметра (id), так и дополнительных аргументов?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
19
1

Ответы 1

Наконец разобрался. Определив метод следующим образом:

def resolve(id:, **args)
  authenticate_user!

  media = Medium.find(id)

  if media.update(args)
    success_response(media)
  else
    failed_response(media)
  end
end

это сохраняет аргумент id по мере необходимости и позволяет передавать другие параметры без установки для всей записи значения nil.

Оказалось, что это скорее общий вопрос Ruby, чем специфический для graphql-ruby.

Другие вопросы по теме

Похожие вопросы

RubyMine показывает ошибку при попытке запустить проект, в нем говорится, что не удается найти рельсы
Создание области видимости в Ruby on Rails, которая возвращает экземпляр объекта, только если все связанные экземпляры соответствуют определенному условию
Приложение обнаружило следующую ошибку: getaddrinfo: имя или служба неизвестны (SocketError) в Kubernetes
Приложение Rails - заполнение кеша db и сохранение его заполненным
Выявление ошибок отступов с помощью линтера в Rails
Заголовки запросов только с использованием Ruby HTTPClient возвращает код состояния 405 http (метод запрещен) в Ruby on Rails
Ускорить запрос, который занимает 2 секунды на 1000000 на активных записях, а также на PostgreSQL Sql
Timecop Ruby gem неверная задержка между двумя датами после поездки
Как получить конкретную позицию ячейки, используя значение ячейки в геме Aslxs в Rails
React Rails: как получить результаты вызова API