为什么三元运算符不能使用重定向

我喜欢三元运算符。 它确实清理了代码外观,但我有一种情况,它在Rails控制器中无法正常运行。

我收到语法错误: unexpected tSYMBEG, expecting keyword_do or '{' or '('

我一直都遇到这个问题,它开启了将下面的声明更改为三元运算符。 当我尝试将它与重定向语句结合使用时,它总会发生。

我不知道这个规则吗?

 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) 

由于哈希的隐含性质

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开发人员会告诉你出于这样的原因避免使用三元组,以及人们对正在发生的事情的一般理解。 Ruby是一种富有表现力的语言,所以接受它。

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

您需要在调用redirect_to使用括号,以便解析器可以正确理解正在发生的事情:

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