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

时间:2018-04-13 23:56:21

标签: graphql graphql-ruby

其中

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

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

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

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

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

定义这些字段后,对于d1d2target.fields['d?'].function的值都相同(使用不同的对象ID)。但看起来在块版本中,该函数不会应用于该字段。

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

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

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

1 个答案:

答案 0 :(得分:1)

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

for (let i = 0; i < someArr.length; i++) {
  console.log(someArr[i]);
}

因为函数通常实现相同的field 'd2', DirectoryType do resolve FindRecord.new(:directory) end 方法,所以可以将它们视为call(obj, args, ctx),并且您应该能够将它与解析助手一起使用,而不是通常的方式:

Callables