Ruby on rails 为什么赢了';t三元运算符与重定向一起工作

Ruby on rails 为什么赢了';t三元运算符与重定向一起工作,ruby-on-rails,ruby,syntax,controller,Ruby On Rails,Ruby,Syntax,Controller,我喜欢三元运算符。它确实清理了代码外观,但我发现它在Rails控制器中的行为不正确 我得到一个语法错误:意外的tSYMBEG,应为关键字_do或“{”或“(” 我一直都会遇到这个问题,它会将下面的语句更改为三元运算符。当我试图将它与重定向语句结合使用时,总是会发生这种情况 我不知道这方面有什么规定吗 if nexti==0 then redirect_to :back else redirect_to edit_playt_path(id: actform['playt_id'], i:

我喜欢三元运算符。它确实清理了代码外观,但我发现它在Rails控制器中的行为不正确

我得到一个语法错误:
意外的tSYMBEG,应为关键字_do或“{”或“(”

我一直都会遇到这个问题,它会将下面的语句更改为三元运算符。当我试图将它与重定向语句结合使用时,总是会发生这种情况

我不知道这方面有什么规定吗

if nexti==0 then
  redirect_to :back
else
  redirect_to edit_playt_path(id: actform['playt_id'], i: nexti)
end

nexti==0 ? redirect_to :back : redirect_to edit_playt_path(id: actform['playt_id'], i: nexti)

您需要在调用
重定向到
时使用括号,以便解析器能够正确理解发生了什么:

nexti==0 ? redirect_to(:back) : redirect_to(edit_playt_path(id: actform['playt_id'], i: nexti))

因为散列的隐含性质

Ruby/Rails将暗示您的重定向参数是一个散列,在您的示例中有一些尴尬的含义

当ruby暗示要重定向的参数时,它会在以下场景中将其视为哈希,并将其解析为

nexti==0 ? redirect_to({:back, : redirect_to edit_playt_path(id: actform['playt_id'], i: nexti})
这是无效的,如果显式定义散列/参数,它应该可以工作

nexti==0 ? redirect_to(:back) : redirect_to(edit_playt_path({id: actform['playt_id'], i: nexti}))
大多数ruby/rails开发人员都会告诉您,出于这样的原因,以及人类对正在发生的事情的普遍理解,避免使用ternaries。ruby被认为是一种表达性语言,所以请接受它

return redirect_to(:back) if nexti==0
redirect_to(edit_playt_path({id: actform['playt_id'], i: nexti}))

我认为这也有同样的缺陷,即使它真的有效,你仍然可能需要括号,只是为了你自己的理智。