【发布时间】:2021-03-31 23:11:38
【问题描述】:
我正在开展一个辅助项目,以学习将 GraphQL 实现到 Rails 6 应用程序中。为此,我使用graphql-ruby gem。
我有一个解析方法来更新看起来像这样的 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 存储库中看到 this issue 来自有同样问题的人,但是他们被告知将默认值设置为 nil,当我尝试这样做时,它当然将该模型的每一列设置为 nil .
我希望能够仅更改实际作为参数传递的字段,而不会影响其他字段。如何同时允许必需参数 (id) 和可选参数?
【问题讨论】:
标签: ruby-on-rails ruby graphql-ruby