0

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

module Types
  module MyApp
    class MembersStatus < Types::Base::Object
      field :active, [Types::MyApp::User], null: true
      field :on_leave, [Types::MyApp::User], null: true
      field :status_unknown, [Types::MyApp::User], 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这个文档,但还不能实现它。这可以做到吗?请帮忙。

4

1 回答 1

1

正如您所描述的,您需要将该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非管理员用户的字段。

于 2021-03-16T14:29:02.777 回答