3

在哪里

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)
  ...
}

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

4

1 回答 1

1

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

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

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

field :students, types[StudentType] do
  argument :grade, types.Int
  resolve ->(obj, args, ctx) {
    Student.where(grade: args[:grade])
  }
end
于 2018-04-24T02:15:15.533 回答