解决后处理 connection_type

Process connection_type after resolved

我使用 graphql gem 1.8.11.

我的 UserTypenotifications 连接字段,如果它被查询,我想执行一些操作(下面示例中的 read!)。

下面的示例对所有关联字段执行操作。 即使notifications字段有分页参数,没有查询到所有notifications,也会对所有notifications.

进行操作

如何只对查询到的节点执行操作?

module Types
  class UserType < Types::BaseObject
    implements GraphQL::Relay::Node.interface

    field :id, ID, null: false
    field :notifications, NotificationType.connection_type, null: true

    global_id_field :id


    def notifications
      object.notifications.tap { |o| o.read! }
    end
  end
end

我最终自定义了连接 class。

app/graphql/types/notification_type.rb:

module Types
  class NotificationType < Types::BaseObject
    #
    # existing code
    #

    class << self
      def connection_type_class
        @connection_type_class ||= Types::NotificationConnectionType
      end
    end
  end
end

app/graphql/types/notificaiton_connection_type.rb:

module Types
  class NotificationConnectionType < GraphQL::Types::Relay::BaseConnection
    def nodes
      super.map(&:read!)
    end
  end
end