向关联的 GraphQL 字段返回类型添加附加字段

问题描述

我的应用程序中有这种 GraphQL 类型。

module Types
  module MyApp
    class MembeRSStatus < Types::Base::Object
      field :active,[Types::MyApp::User],null: true
      field :on_leave,null: true
      field :status_unkNown,null: true
    end
  end
end

我想为 User 字段的关联 on_leave 类型添加一个附加字段。

例如,对于 on_leave 字段,我希望关联的 User 具有附加字段 leave_duration

field :leave_duration,Integer,null: true

这样,我就可以进行如下查询

query memberStatus{
  memberStatus {
    active { name }
    onLeave { name leaveDuration }
    statusUnkNown { name } 
  }
}

我已经查看了 https://graphql-ruby.org/type_definitions/extensions.html#customizing-fields 这个文档,但还不能实现它。这能做到吗?请帮忙。

解决方法

正如您所描述的,您需要将 leave_duration 字段添加到用户类型中。

module Types
  module MyApp
    class UserType
      # other stuff
      field :leave_duration,GraphQL::Types::ISO8601Date,null: true

      # Optional: Define leave_duration if it isn't already a field on the model:
      def leave_duration
        # implementation that returns a date
      end
    end
  end
end

看起来您在 field() 调用中可能有错别字,其中 :leave_duration 应该是一个符号,而不是一个变量或方法。这在上面的代码片段中已修复。

编辑:关于您关于仅在 on_leave 时有条件地拥有 leave_duration 的问题,我建议这样做:

def leave_duration
  return nil unless object.on_leave

  # implementation that returns a date
end

有一种方法可以从架构中隐藏字段,这里描述: https://github.com/rmosolgo/graphql-ruby/issues/893

但是,根据另一个字段的存在来隐藏一个字段对我来说似乎太过分了。我认为这主要是为了隐藏非管理员用户的 is_admin 等字段。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...