我喜欢三元运算符。它确实清理了代码外观,但我有一种情况,它在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)
答案 0 :(得分:2)
由于散列的隐含性质
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 devs会告诉你出于这样的原因避免使用三元组,以及人们对正在发生的事情的一般理解。 Ruby是一种富有表现力的语言,所以接受它。
return redirect_to(:back) if nexti==0
redirect_to(edit_playt_path({id: actform['playt_id'], i: nexti}))
答案 1 :(得分:1)
您需要在调用redirect_to
时使用括号,以便解析器能够正确理解正在发生的事情:
nexti==0 ? redirect_to(:back) : redirect_to(edit_playt_path(id: actform['playt_id'], i: nexti))