问题描述
我的应用程序中有这种 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
等字段。