You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby on Rails中GraphQL客户端Mutation动态传参实现求助

解决GraphQL Mutation动态传递变量的问题

嘿,别着急,这其实是GraphQL里很基础的变量使用场景,我来一步步教你怎么改:

首先,你需要把原来硬编码的查询改成支持变量的形式,也就是把固定的字符串换成带$前缀的变量占位符,同时在mutation的开头声明这些变量的类型(GraphQL是强类型的,必须指定):

# 重构后的MutationQuery,使用变量代替硬编码值
MutationQuery = GraphqlClient.parse <<-'GRAPHQL'
mutation CreateEmployee($email: String!, $familyName: String!, $givenName: String!) {
  createEmployee(input: {
    email: $email,
    familyName: $familyName,
    givenName: $givenName
  }) {
    id
  }
}
GRAPHQL

这里的!表示这个变量是必填的,如果你有可选字段,可以去掉!。

接下来,从你的@employee对象里提取对应的值,组装成variables哈希:

# 从@employee中获取动态值,注意这里的key要和上面定义的变量名完全一致(包括驼峰)
variables = {
  email: @employee.email,
  familyName: @employee.family_name, # 这里要对应你Ruby模型里的属性名,比如如果是familyName就直接写@employee.familyName
  givenName: @employee.given_name
}

最后,和之前一样执行查询,把variables传进去就行:

result = GraphqlClient.query(MutationQuery, variables: variables)

小技巧:自动处理属性名大小写

要是你遇到Ruby模型属性是蛇形命名(比如family_name),但GraphQL要求驼峰命名的情况,可以用Ruby的方法自动转换,不用手动一个个写key:

variables = @employee.attributes.slice(:email, :family_name, :given_name)
                               .transform_keys { |k| k.to_s.camelize(:lower).to_sym }

这样既高效又能避免拼写错误~

内容的提问来源于stack exchange,提问作者Arun R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:48:46