Процесс connection_type после разрешения - PullRequest
0 голосов
/ 11 декабря 2018

Я использую graphql gem 1.8.11.

У моего UserType есть notifications поле подключения, и, если он запрашивается, я бы хотел выполнить какую-то операцию (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

1 Ответ

0 голосов
/ 17 декабря 2018

В итоге я настроил класс соединения.

app / graphql / types / messages_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
...