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
相关产品推荐
相关产品推荐

