我需要向 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_count
graphql 添加字段,RequestType
但我迷路了:
class RequestType < Types::BaseObject
field :unread_message_count, Integer, null: false
def unread_message_count
user = context[:current_user]
// here
end
end