在GraphQL / Rails中如何在query_type中传递参数?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在GraphQL / Rails中如何在query_type中传递参数?相关的知识,希望对你有一定的参考价值。

所以我试图查询数据库中的单个用户,但最终得到:

"Field 'userSingle' doesn't accept argument 'first_name'"

当我运行以下查询时,我在GraphiQL中得到它:

query GetSingleUser {
 userSingle(first_name: "Test"){
  first_name
  last_name
 }
} 

在我的query_type.rb中,我有以下内容:

field :userSingle, !types[Types::UserType] do
 resolve -> (obj, args, ctx) {
 argument :first_name, !types.String
 argument :id, types.ID
 User.find(id: args[:id])}
end

原来我有:

field :userSingle, !types[Types::UserType] do
  resolve -> (obj, args, ctx) {User.find(id: args[:id])}
end

同样的问题。如果我拿出id:同样的问题。同样的问题:

  field :userSingle, !types[Types::UserType] do
    resolve -> (obj, args, ctx) {
    argument :first_name, !types.String
    argument :id, types.ID
      user = User.find_by(
        id: args[:id],
        first_name: args[:first_name])
    }
  end
答案

而不是!在query_type文件中的类型[Types :: UserType]到字段:userSingle do type types :: UserType argument resolve .. end

另一答案

您可以使用以下命令创建user_type.rb文件:

class Types::UserType < Types::BaseObject
  description "A user object"

  field :id, Integer, null: false
  field :first_name, String, null: false
end

然后在query_type.rb文件中有以下内容:

module Types
  class QueryType < Types::BaseObject
    ...

    # User query
    field :user, UserType, null: true do
      description "Find a user by first_name"
      argument :first_name, String, required: true
    end
    def user(first_name:)
      User.find_by(first_name: first_name)
    end
  end
end

完成所有这些后,查询应该如下所示:

{
  user(first_name: "name") {
    id
    firstName: first_name
  }
}

以上是关于在GraphQL / Rails中如何在query_type中传递参数?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 .graphql 文件中编写 GraphQl Upsert Query

如何在 Rails 中设置 GraphQL Relay API

如何在 router.query 之后运行 GraphQL 查询?

如何在调用 Apollo Graphql Query 之前等待服务器响应?

对于 Rails 和 GraphQL 项目,如何定义多个同名查询?

以LeetCode为例——如何发送GraphQL Query获取数据