0

我需要向 graphql 响应添加自定义字段,所以我考虑实现自己的自定义解析器。然而看到这个,我问自己是否真的需要一个自定义解析器:

首先,问问自己......你真的需要解析器吗?将逻辑放入解析器有一些缺点:

  • 由于它与 GraphQL 耦合,因此它比应用程序中的普通 Ruby 对象更难测试
  • 由于基类来自 GraphQL-Ruby,它会受到上游更改的影响,这可能需要更新您的代码

好吧,我完全同意。但我不明白以下替代方法是如何工作的。

以下是一些可供考虑的替代方案:

  • 将显示逻辑(排序、过滤等)放入应用程序中的普通 Ruby 类中,然后测试该类
  • 使用方法连接该对象,例如:
field :recommended_items, [Types::Item], null: false
def recommended_items
  ItemRecommendation.new(user: context[:viewer]).items
end

不幸的是,这对我来说似乎并不明显。

我有一个Request与 有has_many关系的模型Messages

def Request
   has_many :messages, -> { order(created_at: :desc, id: :desc) }

   def unread_message_count(user)
    return messages.unread(user).count
  end
end

我想向unread_message_countgraphql 添加字段,RequestType但我迷路了:

class RequestType < Types::BaseObject
  field :unread_message_count, Integer, null: false

  def unread_message_count
    user = context[:current_user]
    // here
  end
end
4

1 回答 1

1

OK,很简单,你可以参考graphql类型的实际模型 usingTypes::BaseObject#object方法。

所以在这种情况下,它是:

class RequestType < Types::BaseObject
  field :unread_message_count, Integer, null: false

  def unread_message_count
    user = context[:current_user]
    user.nil? ? 0 : object.unread_message_count(user)
  end
end
于 2020-07-16T06:54:25.407 回答