gpt4 book ai didi

graphql - 为什么 graphql-ruby 函数定义通过 kwarg 工作,而不是通过 block 中的函数方法工作?

转载 作者:行者123 更新时间:2023-12-02 02:55:14 25 4
gpt4 key购买 nike

在哪里

class FindRecord < GraphQL::Function
...
argument :id, !types.ID
...
end

GraphQL::ObjectType.define block 中字段定义的这种变体可以正常工作:

 field 'd1', DirectoryType, function: FindRecord.new(:directory) 

但对于同一个查询,这会失败并显示错误消息 “字段 'd2' 不接受参数 'id'”:

field 'd2', DirectoryType do                                                                                
function FindRecord.new(:directory)
end

定义这些字段后,对于 d1d2target.fields['d?'].function 的值是相同(具有不同的对象 ID)。但在 block 版本中,该功能似乎并未应用于该字段。

当我跳过 field 助手并像这样定义字段时,它也不起作用:

target.fields[name] = GraphQL::Field.define {
...
function FindRecord.new(:directory)
...
}

我是不是调用错了函数方法?任何建议表示赞赏。

最佳答案

您可能想在 block 中使用 resolve 而不是函数(这是字段方法的一个选项,而不是 block 上可用的帮助程序):

field 'd2', DirectoryType do                                                                                
resolve FindRecord.new(:directory)
end

因为 Functions 通常实现相同的 call(obj, args, ctx) 方法,所以它们可以被认为是 Callables 并且您应该能够将它与 resolve 一起使用助手而不是通常的方式:

field :students, types[StudentType] do
argument :grade, types.Int
resolve ->(obj, args, ctx) {
Student.where(grade: args[:grade])
}
end

关于graphql - 为什么 graphql-ruby 函数定义通过 kwarg 工作,而不是通过 block 中的函数方法工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49826549/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com