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

如何修复Rails中GraphQL突变的Lint/Syntax: unexpected token tRPAREN错误?

修复Rails GraphQL突变中的RuboCop语法错误

我来帮你搞定这个语法问题!你遇到的是Ruby中lambda与方法参数结合时的语法优先级和写法规范问题,下面是具体的解决方案和解释:

正确代码写法

你可以选择以下几种符合语法规范的写法来解决问题:

写法1:使用标准lambda语法(带大括号)

resolve(Auth.protect(lambda { |_obj, inputs, ctx|
  current_user = ctx[:current_user]
  if current_user.update(inputs.to_params)
    { user: current_user }
  else
    { messages: current_user.fields_errors }
  end
}))

写法2:使用更简洁的stabby lambda(箭头lambda)

resolve(Auth.protect ->(_obj, inputs, ctx) {
  current_user = ctx[:current_user]
  if current_user.update(inputs.to_params)
    { user: current_user }
  else
    { messages: current_user.fields_errors }
  end
})

写法3:去掉resolve的括号,使用do...end块

resolve Auth.protect do |_obj, inputs, ctx|
  current_user = ctx[:current_user]
  if current_user.update(inputs.to_params)
    { user: current_user }
  else
    { messages: current_user.fields_errors }
  end
end

错误原因解释

你原来的代码出现语法错误有两个核心原因:

  1. lambda写法不规范:Ruby中lambda的标准写法是lambda { |参数| 代码块 } 或者->(参数) { 代码块 },你写的lambda (_obj, inputs, ctx) do不符合Ruby的语法规则,导致解析失败。
  2. 方法参数与do...end的优先级问题:当使用do...end作为方法参数时,Ruby的语法优先级会让它默认绑定到最外层的方法(也就是resolve),而不是Auth.protect,这就导致了括号匹配错误和语法解析异常。

以上几种写法都能符合RuboCop的语法规范,同时正常实现你的GraphQL突变逻辑,你可以根据自己的编码习惯选择其中一种。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 09:05:24