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

为什么graphql ruby函数定义通过kwarg工作,而不是通过块中的函数方法工作?,graphql,graphql-ruby,Graphql,Graphql Ruby,在哪里 但对于同一查询,此操作失败,错误消息为“字段“d2”不接受参数“id”: 定义这些字段后,对于d1和d2而言,target.fields['d')。函数的值相同(具有不同的对象ID)。但在块版本中,函数似乎没有应用到字段 当我跳过字段帮助程序并定义如下字段时,它也不起作用: field 'd2', DirectoryType do

在哪里

但对于同一查询,此操作失败,错误消息为“字段“d2”不接受参数“id”:

定义这些字段后,对于
d1
d2
而言,
target.fields['d')。函数
的值相同(具有不同的对象ID)。但在块版本中,函数似乎没有应用到字段

当我跳过
字段
帮助程序并定义如下字段时,它也不起作用:

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

我调用函数方法是否错误?非常感谢您的建议。

您可能希望在块中使用resolve,而不是function(函数是field方法的一个选项,而不是块上可用的帮助程序):

由于函数通常实现相同的
调用(obj、args、ctx)
方法,因此可以将它们视为
可调用函数
,并且您应该能够将其与解析帮助程序一起使用,而不是使用通常的方法:

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

但是函数中的参数不会被应用,必须单独添加到每个字段中。那么,应该添加它们,因为
FindRecord.new(:directory).call
as接收相同的参数。如果它们没有得到应用,那么您可以尝试:
resolve->(obj,args,ctx){FindRecord.new(:directory.call(obj,args,ctx)}
这并没有解决问题,但这是唯一的尝试,也是一个合理的尝试,因此授予赏金。谢谢你@elyalvarado。
field 'd2', DirectoryType do                                                                                
  function FindRecord.new(:directory)                                                               
end      
target.fields[name] = GraphQL::Field.define {
  ...
  function FindRecord.new(:directory)
  ...
}
field 'd2', DirectoryType do                                                                                
  resolve FindRecord.new(:directory)                                                               
end   
field :students, types[StudentType] do
  argument :grade, types.Int
  resolve ->(obj, args, ctx) {
    Student.where(grade: args[:grade])
  }
end